PHP preg_replace修改

时间:2017-06-11 21:42:19

标签: php regex preg-replace

我有一个表达式[text][id],应该用链接<a href='id'>text</a>

替换

解决方案是(id是整数)

$s = preg_replace("/\[([^\]]+)(\]*)\]\[([0-9]+)\]/","<a href='$3'>$1$2</a>",$string);

但是,在某些情况下(并非总是!),表达式可能如下所示

[text][id][type]

在这种情况下应该用<a href='id' class='type'>text</a>

替换

想法?

1 个答案:

答案 0 :(得分:5)

使用preg_replace_callback函数的解决方案:

$str = 'some text [hello][1] some text [there][2][news]';  // exemplary string

$result = preg_replace_callback('/\[([^][]+)\]\[([^][]+)\](?:\[([^][]+)\])?/',function($m){
    $cls = (isset($m[3]))? " class='{$m[3]}'" : "";  // considering `class` attribute
    return "<a href='{$m[2]}'$cls>{$m[1]}</a>";
},$str);

print_r($result);

输出(作为网页源代码):

some text <a href='1'>hello</a> some text <a href='2' class='news'>there</a>
  • (?:\[([^][]+)\])? - 考虑可选的第3个捕获组( class 属性值)