作为一名正则表达式新手,这令我感到沮丧 - 所有帮助都表示赞赏。 我有这样的事情:
<img src="https://jdfsdf.dsfsdf.sdfsd/upload/sm/dsfsdf/sdfsdf/sdfdsf.jpg" style="..." id="..">
我希望它是:
<img src="https://jdfsdf.dsfsdf.sdfsd/upload/lg/dsfsdf/sdfsdf/sdfdsf.jpg" style="..." id="..">
基本上,将/ sm /更改为/ lg /。 我想通过PHP中的RegEx来做这件事,我正在使用http://www.phpliveregex.com/进行测试。
我可以简单地做到这一点,但是使用简单的PHP str_replace具有较低的健壮性 - 为了这个问题,我想使用RegEx保留答案。
我尝试使用后视,如下所示:
(?<=<img src.+upload\/)sm
这显然不起作用,但下面的代码与所需的点匹配。
<img src.+upload\/
我很难过。任何帮助或链接到一个体面的教程,将非常感谢。
答案 0 :(得分:6)
您需要将结果捕获到一个组中。你的正则表达式将如下所示:
(<img src.+upload/)(sm)([^>]+>)
如您所见,您可以通过添加括号来捕获组。现在只需使用这些组并替换值。
$string = '<img src="https://jdfsdf.dsfsdf.sdfsd/upload/sm/dsfsdf/sdfsdf/sdfdsf.jpg" style="..." id="..">';
$pattern = '/(<img src.+upload/)(sm)([^>]+>)/i';
$replacement = '$1lg$3';
echo preg_replace($pattern, $replacement, $string);
处尝试使用此正则表达式
答案 1 :(得分:1)
试试这个:
preg_replace('@(<img[^>]+http[^\'">]+)/sm/@i', '$1/lg/', $str1);
答案 2 :(得分:0)
您可以使用str_replace。正是这个任务的正则表达式很难。