【问题标题】:Sed non greedy match: matching first xml nodessed 非贪婪匹配:匹配第一个 xml 节点
【发布时间】:2011-02-15 19:30:39
【问题描述】:

关注此question

$test = "sed -n '1h;1!H;\${;g;s/<item=\"".$name.".*</\item>/".trim(xml)."/g;p;}' ".$file;
exec($test,$cmdresult);

执行此命令以查找具有指定名称的所有 xml 节点,并将其作为变量传递。这里唯一的问题是匹配超出了最初的&lt;/item&gt; 到下一个节点,最后到最后一个&lt;/item&gt;

如何使这个不贪心?

【问题讨论】:

  • 您是否尝试过在 shell 中使用 sed(而不是通过 PHP 调用)?您显然在这里有一些错误,例如&lt;/\item&gt; 而不是&lt;\/item&gt;。 Sed 会通知你。
  • 我知道你说你有一个大文件要处理,但你真的应该使用 PHP XML 库。
  • @Dennis simplexml in php 不允许我替换节点
  • 一定会one of these

标签: regex sed non-greedy


【解决方案1】:

有时使用负类比非贪婪匹配更好。它允许更精细的控制并且效率更高。 IE。要匹配所有内容但不标记关闭,您可以执行 [^>]*.虽然如果你可以有可以在其中包含“>”的字符串,这将不起作用。你可以在这里阅读更多内容:http://www.regular-expressions.info/repeat.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2012-06-06
    • 1970-01-01
    • 2014-07-06
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多