请教一个正则匹配的问题
需求:有这样一个字符串,我需要判断 img 标签的 src 中是否有 .jpg 或者 .png 后缀,没有则加上。
原先想用正则一步到位,但是实现起来好像不太乐观。
于是分了很多步操作。想请教更好的解决方法!
以下是我的代码
<?php
header("Content-type: text/html; charset=utf-8");
$str = '<img src=\"https://www.test.com/test1\" alt=\"test1\" />
<img src=\"https://www.test.com/test2.png\" alt=\"test2\" />
dmaslkfqwen faslmdasl
<img src=\"https://www.test.com/test3.jpg\" alt=\"test3\" />
<img src=\"https://www.test.com/test4.jpg\" alt=\"test4\" />
<img src=\"https://www.test.com/test14\" alt=\"test14\" />
<img src=\"https://www.test.com/test5.jpg\" alt=\"test5\" />
123ff';
$pattern1 = '/<img.+src=\\\[\"|\']?(.+\.(jpg|png))\"?.+>/i';
$pattern2 = '/<img.*?src=\\\[\"|\']?(.*?)\\\[\"|\']?\s.*?>/i';
preg_match_all($pattern1, $str, $images1);
preg_match_all($pattern2, $str, $images2);
$new_arr = array_merge(array_diff($images1[1], $images2[1]),array_diff($images2[1], $images1[1]));
foreach ($new_arr as $key => $arr) {
$search = '\\"' . $arr . '\\';
$replace = '\\"' . $arr . '.jpg\\';
$str = str_replace($search, $replace, $str);
}
echo '<pre>';
var_dump($str);
exit();
这是结果
推荐文章: