使用 preg_replace 并为特定域名添加 class

use preg_replace and add class for a specific domain name

我正在寻找更改所有 img 标签的解决方案,其中 src imgur。 我试过这个,一般来说这是有效的,但问题可能是如果 imgur 更改他们的子域,在这种情况下这个正则表达式将不起作用。

所以为了更清楚,我只需要添加 class 命名所有托管在 imgur 上的图像。

$string = 'I have been searching <img src="https://i.imgur.com/NknpNdu.jpg" alt=""> for...';
$regex = '#<img src="https://i.imgur.com([^"/]*/?[^".]*\.[^"]*)"([^>]*)>#';
$replace = '<img class="newClass" src="https://i.imgur.com/">';
$Content = preg_replace($regex, $replace, $string);

我的猜测是这个表达式

(<img src=".*?imgur\.com(.*?))(?=\/?\s?>)

替换为 class="newClass" 可能就可以了。

Demo 1

测试

$re = '/(<img src=".*?imgur\.com(.*?))(?=\/?\s?>)/s';
$str = 'I have been searching <img src="https://i.imgur.com/NknpNdu.jpg" alt=""> for... I have been searching <img src="https://i.imgur.com/NknpNdu.jpg" alt=""> for... I have been searching <img src="https://i.imgur.com/NknpNdu.jpg" alt=""> for... I have been searching <img src="https://i.imgur.com/NknpNdu.jpg" alt="" /> for... ';
$subst = ' class="newClass"';

$result = preg_replace($re, $subst, $str);

echo $result;

或更简化、边界更少的表达式:

(<img .*?imgur\.com(.*?))(?=\/?\s?>)

也会这样做。

Demo 2