识别第二个实例

3

我有一个字符串,像这样:

[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个回答

1
你可以使用这个模式:

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

请注意,我没有从第一个字符类中排除:,以处理URL中的登录/密码,并确保使用回溯找到最后一个:。因此,
$result = preg_replace('~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is', '<a href="$1">$2</a>', $text);

零件的详细信息:([^]]+):[^]]*]

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

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

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


这个有效,谢谢。现在是时候将其分解成小块并找出它的工作原理了 ::) - andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接