识别第二个实例

时间:2015-03-19 11:02:57

标签: php regex preg-replace

我有一个这样的字符串:

[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

如何修改我的正则表达式以删除:之后的部分? 它是字符串中:的第二个实例。

1 个答案:

答案 0 :(得分:1)

您可以使用此模式:

~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is

请注意,我没有从第一个字符类中排除:来处理网址中的最终登录/传递,并确保使用回溯找到最后一个: 。所以

$result = preg_replace('~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is', '<a href="$1">$2</a>', $text);

部分详情:([^]]+):[^]]*]

[^]]是匹配除]之外的所有字符的字符类。

[^]]+将匹配所有字符,直到结束],但正则表达式引擎将返回(回溯机制),直到找到:以使模式成功。

完成后,[^]]*将匹配最后一个字符,直到结束]