我尝试用空字符串替换以下标记及其内容:
<a href="http://localhost/photo/448e7d40ed468d73c5f9caba573f6273-0.png" class="wall-image-anchor" target="_blank"><img src="http://localhost/photo/448e7d40ed468d73c5f9caba573f6273-0.png" /></a>
请注意,<a>
标记内的href网址可以是任何内容。 <a>
内的内容也是如此,在这种情况下<img>
及其内容。
到目前为止,我得到了以下代码:
$text = preg_replace('@(.*?)<(?:a\b.*?class="wall-image-anchor".*?)>.*?</a>(.*?)@si', '$1$2', $text);
此代码应转换以下字符串:
zzzzz<a href="http://localhost/zz/photo/448e7d40ed468d73c5f9caba573f6273-0.png " class="wall-image-anchor" target="_blank"><img src="http://localhost/zz/photo/448e7d40ed468d73c5f9caba573f6273-0.png" alt="Image/photo" /></a>ffff<br /><a href="http://localhost/ada/photo/448e7d40ed468d73c5f9caba573f6273-0.png " class="wall-image-anchor" target="_blank"><img src="http://localhost/ada/photo/448e7d40ed468d73c5f9caba573f6273-0.png" alt="Image/photo" /></a>ffffgg ffff<br /><a href="http://localhost/dad/photo/448e7d40ed468d73c5f9caba573f6273-0.png " class="wall-image-anchor" target="_blank"><img src="http://localhost/dad/photo/448e7d40ed468d73c5f9caba573f6273-0.png" alt="Image/photo" /></a>ffffgg'
成:
zzzzzffff
ffffgg ffff
ffffgg
此代码有效。我的问题是:还有其他方法可以让它更快吗?
问候
答案 0 :(得分:1)
这里的第一个问题是正确性。如上所述,无论<a>
属性是什么,您的正则表达式都会从第一个class
标记的开头开始匹配。 (demo)您需要将内部.*?
替换为超出标记边界的内容[>]*
,即(.*?)
。
这也将大大减少回溯量,大大提高性能。你应该做的另一件事是摆脱任何一端的'@<a\b[^>]*class="wall-image-anchor"[^>]*>.*?</a>@si'
。任何与正则表达式不匹配的东西都不受替换操作的影响,所以你只是让它做了不必要的工作。
以下是它的外观:
action:
答案 1 :(得分:0)
你知道懒惰的比赛是如何起作用的,那你怎么不这样做呢?
$var = "zzzzz<a href=\"http://localhost/zz/photo/448e7d40ed468d73c5f9caba573f6273-0.png \" class=\"wall-image-anchor\" target=\"_blank\"><img src=\"http://localhost/zz/photo/448e7d40ed468d73c5f9caba573f6273-0.png\" alt=\"Image/photo\" /></a>ffff<br /><a href=\"http://localhost/ada/photo/448e7d40ed468d73c5f9caba573f6273-0.png \" class=\"wall-image-anchor\" target=\"_blank\"><img src=\"http://localhost/ada/photo/448e7d40ed468d73c5f9caba573f6273-0.png\" alt=\"Image/photo\" /></a>ffffgg ffff<br /><a href=\"http://localhost/dad/photo/448e7d40ed468d73c5f9caba573f6273-0.png \" class=\"wall-image-anchor\" target=\"_blank\"><img src=\"http://localhost/dad/photo/448e7d40ed468d73c5f9caba573f6273-0.png\" alt=\"Image/photo\" /></a>ffffgg'";
$output = preg_replace("/<.*?>/", "", $var);
或者您只是尝试专门匹配href和img?
PS。请在下次拼出你的字符串,以便更容易看到你想要抓住的部分。