sed 非贪婪匹配:匹配第一个 xml 节点
跟进这个问题
$test = "sed -n '1h;1!H;\${;g;s/<item=\"".$name.".*</\item>/".trim(xml)."/g;p;}' ".$file;
exec($test,$cmdresult);
执行此命令以查找所有 xml 节点指定的名称将其作为变量传递。这里唯一的问题是匹配超出了最初的 到下一个节点,最后到最后一个
。
我如何使其不贪婪?
Follow up to this question
$test = "sed -n '1h;1!H;\${;g;s/<item=\"".$name.".*</\item>/".trim(xml)."/g;p;}' ".$file;
exec($test,$cmdresult);
This command executes to find all xml nodes with the specified name passed it as a variable. The only problem here is that the match goes beyond the initial </item>
to the next nodes, finally to the last </item>
.
How do I make this non greedy?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有时使用负类比非贪婪匹配更好。它允许更精细的控制并且效率更高。 IE 要匹配所有内容但不匹配标记关闭,您可以执行 [^>]*。不过,如果你可以有可以有“>”的字符串在他们身上这是行不通的。您可以在这里阅读更多内容: http://www.regular-expressions.info/repeat .html
Sometimes its better to use negative class than non greedy match. It allows finer control and is a bit more efficient. I.E. to match everything but not tag close you can do [^>]*. Though if you can have strings that can have ">" in them this will not work. You can read about this a bit more here: http://www.regular-expressions.info/repeat.html