使用PHP正则表达式将内容替换为链接

时间:2014-10-15 13:50:58

标签: php regex preg-replace

我希望在PHP中使用正则表达式将@[SOME TEXT](id:1)的实例替换为<a href="link/$id">SOME TEXT</a>

我一直在网上尝试各种正则表达式教程,但无法弄明白。这就是我到目前为止所拥有的\@\[.*\],但它从@ [Mr to then end Kenneth]中选择所有内容

$text = "This is the thing @[Mr Hugh Warner](id:1) Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vitae minima mollitia, sit porro eius similique fugit quis fugiat quae perferendis excepturi nam in deserunt natus eaque magni soluta esse rem. @[Kenneth Auchenberg](contact:1) Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vitae minima mollitia, sit porro eius similique fugit quis fugiat quae perferendis excepturi nam in deserunt natus eaque magni soluta esse rem. @[Kenneth](id:7)";

4 个答案:

答案 0 :(得分:4)

你可以使用这样的正则表达式:

/@\[([^\]]+)\]\(id:(\d+)\)/

PHP代码:

$pattern = '/@\[([^\]]+)\]\(id:(\d+)\)/';
$replacement = '<a href="link/$2">$1</a>';
$text = preg_replace($pattern, $replacement, $text);

echo $text;

答案 1 :(得分:1)

preg_replace('/@\[([^\]]+)\]\((\w+):(\d+)\)/', '<a href="link/$2/$3">$1</a>', $text);

答案 2 :(得分:0)

在您尝试的示例中,您想要延迟而不是贪婪匹配:

\@\[.*?\]
      ^ make it lazy

另一个选择是确保你不匹配任何结束块引用:

\@\[[^\]]+\]
    ^^^^^ a character class containing any character except the ] character

答案 3 :(得分:0)

\@\[.*?\]\(.*?\)

这将保存为:

Array
(
    [0] => @[Mr Hugh Warner](id:1)
)

我使用此网站寻求帮助:http://www.phpliveregex.com/p/7sv

此外,这不一定是懒惰......这与上面完全相同:

\@\[.*\]\(.*\)