2011-02-15 100 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