帮助在PHP中使用正则表达式替换

bob*_*obo 0 php regex

我在静态html文件中有一堆网址需要更改.

他们现在看起来像这样:

<img src="/foldera/folderb/folderc/images/imgxyz.jpg" />

他们需要看起来像这样:

<img src="imgxyz.jpg" />

所以,我刚写了一个php脚本,打开每个脚本并执行preg_replace().

我的正则表达式(使用双重反斜杠,是):


$regex = '/<img src="\\/foldera\\/folderb\\/folderc\\/images\\/([^"]*)" \\/>/'

$replacement = '<img src="$0" />' ;
Run Code Online (Sandbox Code Playgroud)

因此,我只会在/ images之前捕获任何内容,直到结束报价.

但我得到的是:

<img src="<img src="/foldera/folderb/folderc/images/imgxyz.jpg" />" />

似乎捕获组过于热心......或者某些东西与/ foldera/folderb部分不匹配.

这里发生了什么?

And*_*ore 5

使用$1的替代品.$0匹配整个模式.你想要第一组.

$replacement = '<img src="$1" />' ;
Run Code Online (Sandbox Code Playgroud)

更好的方法是basename作为替换的一部分使用:

$regex = '/(<img src=")([^"]*)"( \\/>)/e';

$replacement = "stripslashes('\$1').basename(stripslashes('\$2')).stripslashes('\$3')";
Run Code Online (Sandbox Code Playgroud)