RegEx:如何修改组的内容

时间:2015-10-22 08:35:18

标签: php regex

我有一个网站的源代码,其中包含多个图片代码。我想使用alt属性的内容作为我的src。所以我想改变这个

<img src="http://www.example.com/img/img.png" alt="A Title">

到此:

<img src="http://www.example.org/img/a_title.png" alt="A Title">

要在src属性中使用alt属性值,我使用以下正则表达式

/(<img.+?src=").+?(".+?alt="(.+?)">)/

并使用$1$3$2进行替换。

我使用PHP作为语言。

但是如何修改第三组(小写,用下划线替换空格)?

2 个答案:

答案 0 :(得分:1)

由于您使用的是PHP,请使用preg_replace_callback

$newLine = preg_replace_callback(
    '/(<img.+?src=").+?(".+?alt="(.+?)">)/',
    function($matches) {
        return $matches[1] . strtolower( str_replace(' ', '_', $matches[3]) ) . $matches[2];
    },
    $str
);

答案 1 :(得分:1)

这是一个使用preg_match的工作实现:

$input = "<img src=\"http://www.example.com/img/img.png\" alt=\"A Title\">";

$re = '~(<img\s*src=".*\/).*(\.[^"]*)("\s*alt="([^"]+).*)~';

preg_match($re, $input, $m);

$filtered_string = $m[1] . str_replace(" ","_",strtolower($m[4])) . $m[2] . $m[3];

输出:

<img src="http://www.example.com/img/a_title.png" alt="A Title">

在线实施here

更新:preg_replace_callback实施:

$filtered_string = preg_replace_callback(
    '~(<img.*src=".*\/).*(\.[^"]*)(".*alt="([^"]+).*)~',
    function($m) {
      return $m[1] . str_replace(" ","_",strtolower($m[4])) . $m[2] . $m[3];
    },
    $str
);

在线实施第二个版本here