如何在 PHP 中编写正则表达式
How to write a regular expression in 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
必须是可选的。
使用正则表达式,我只需要查找并替换那些在文本内容中连续出现 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
必须是可选的。