我需要删除以下XML中带有city Moscow的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>
使用此RegEx:
<offer.*?>'s*?<param.*?>'s*?Moscow's*?<'/param>'s*?<'/offer>
Regexr上的实时演示
工作原理:
<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>
<offer[^>]*>[^<]*<param[^>]*>Moscow<'/param>[^<]*<'/offer>
演示