我有一个这样的字符串:
[url=http://www.las-vegas.cc/weddings.php:1d5lzpq4]Las Vegas Wedding[/url:1d5lzpq4]
我需要清理它以使其成为有效的html,如下所示:
<a href="http://www.las-vegas.cc/weddings.php" target="blank">Las Vegas Wedding</a>
我想过使用正则表达式进行肮脏的工作并提出:
/\[url=(.+(?:))\](.*)\[\/url:.*\]/Ui
但由于我的结果是
,因此无法正常工作1 - http://www.las-vegas.cc/weddings.php:1d5lzpq4
2 - Las Vegas Wedding
如何修改我的正则表达式以删除:
之后的部分?
它是字符串中:
的第二个实例。
答案 0 :(得分:1)
您可以使用此模式:
~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is
请注意,我没有从第一个字符类中排除:
来处理网址中的最终登录/传递,并确保使用回溯找到最后一个:
。所以
$result = preg_replace('~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is', '<a href="$1">$2</a>', $text);
部分详情:([^]]+):[^]]*]
[^]]
是匹配除]
之外的所有字符的字符类。
[^]]+
将匹配所有字符,直到结束]
,但正则表达式引擎将返回(回溯机制),直到找到:
以使模式成功。
完成后,[^]]*
将匹配最后一个字符,直到结束]