使用RegEx更改html标记中的值

时间:2013-11-18 06:54:48

标签: php html regex

作为一名正则表达式新手,这令我感到沮丧 - 所有帮助都表示赞赏。 我有这样的事情:

<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\/

我很难过。任何帮助或链接到一个体面的教程,将非常感谢。

3 个答案:

答案 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);

http://gskinner.com/RegExr/

处尝试使用此正则表达式

答案 1 :(得分:1)

试试这个:

preg_replace('@(<img[^>]+http[^\'">]+)/sm/@i', '$1/lg/', $str1);

答案 2 :(得分:0)

您可以使用str_replace。正是这个任务的正则表达式很难。