我需要在以下XML中删除城市莫斯科的offer
元素:
<offer id="14305" available="true">
<param name="City">Moscow</param>
</offer>
<offer id="14306" available="true">
<param name="City">LA</param>
</offer>
如何使用PHP正则表达式进行操作?
我试过了:
preg_replace('/<offer[^(>Moscow<).]+?<\/offer>/s', ''. $string);
但没有成功。
我读了你的意见。真的很棒。但是我有一个贪婪的新问题:
<offer id="14305" available="true">
<param name="Color">Red</param>
<engine>XYZ</engine>
<param name="City">Moscow</param>
</offer>
<offer id="14306" available="true">
<param name="Color">Red</param>
<param name="City">LA</param>
</offer>
<offer id="14306" available="true">
<weight>1000</weight>
<param name="Color">Red</param>
<param name="City">LA</param>
</offer>
我的正则表达式过于贪婪:(
<offer.*?>\s*?<param.*?>\s*?Moscow\s*?<\/param>\s*?<\/offer>
答案 0 :(得分:2)
使用此RegEx:
<offer.*?>\s*?<param.*?>\s*?Moscow\s*?<\/param>\s*?<\/offer>
工作原理:
<offer.*?> # Select opening <offer> with optional parameters
\s*? # Optional Whitespace
<param.*?> # Select opening <param> with options parameters
\s*? # Optional Whitespace
Moscow # Select Moscow text
\s*? # Optional Whitespace
<\/param> # Select closing </param>
\s*? # Optional Whitespace
<\/offer> # Select closing </offer>
答案 1 :(得分:0)
<offer[^>]*>[^<]*<param[^>]*>Moscow<\/param>[^<]*<\/offer>