我希望在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)";
答案 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
此外,这不一定是懒惰......这与上面完全相同:
\@\[.*\]\(.*\)