2011-02-15 91 views
1

跟进这个question桑达非贪婪匹配:匹配第一个XML节点

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

这个命令执行查找所有XML节点与指定名称传递它作为一个变量。这里唯一的问题是比赛超出了最初的</item>到下一个节点,最后到最后的</item>

如何让这个不贪心?

+1

你是否试图在shell中使用sed(而不是通过PHP调用它)?你显然在这里有一些错误,比如``而不是`<\/item>`。 Sed会通知你的。 – 2011-02-15 19:50:08

回答

2

有时候使用负面课堂比使用非贪婪课程更好。它允许更好的控制,并且效率更高。 I.E.匹配一切,但不标记关闭,你可以做[^>] *。虽然如果你的字符串中可能有“>”,这是行不通的。你可以在这里了解到更多:http://www.regular-expressions.info/repeat.html