如何用PHP编写正则表达式



使用正则表达式,我只需要查找并替换文本内容中一行出现2到10次的元素,然后用其他元素替换它们。

文本示例:

$text = '<p>Text text text</p>
<p><a href="#" class="img" target="_blank"><img src="pic_1.jpg" alt=""></a></p>
<p>Text text text</p>
<p><a href="#" class="img" target="_blank"><img src="pic_2.jpg" alt=""></a></p>
<p><a href="#" class="img" target="_blank"><img src="pic_3.jpg" alt=""></a></p>
<p><a href="#" class="img" target="_blank"><img src="pic_4.jpg" alt=""></a></p>
<p><a href="#" class="img" target="_blank"><img src="pic_5.jpg" alt=""></a></p>
<p>Text text text</p>
<p>Text text text</p>
<p>Text text text</p>
<p><a href="#" class="img" target="_blank"><img src="pic_6.jpg" alt=""></a></p>
<p>Text text text</p>';

我的常规示例:

$regular = "#(<p><a href=['"](.+?)['"] class=['"]img['"]([^>]+)><img([^>]+)></a></p>){2,10}#is";

我会试试这个

echo preg_replace_callback($regular, function ($matches) {
return 'some replace text example';
}, $text);

我希望收到:

<p>Text text text</p>
<p><a href="#" class="img" target="_blank"><img src="pic_1.jpg" alt=""></a></p>
<p>Text text text</p>
some replace text example
some replace text example
some replace text example
some replace text example
<p>Text text text</p>
<p>Text text text</p>
<p>Text text text</p>
<p><a href="#" class="img" target="_blank"><img src="pic_6.jpg" alt=""></a></p>
<p>Text text text</p>

但它不起作用。我做错了什么?

您可以使用以下正则表达式:

$regular = "#(<p><a href=['"](.+?)['"] class=['"]img['"]([^>]+)><img([^>]+)></a></p>r?n){2,10}#i";

注意,我添加了r?n并删除了s标志。

这些行总是用r?n分隔,因此必须是匹配的一部分。

编辑

忘记了这是Linux,r必须是可选的。

最新更新