识别第二个实例
identifying the second instance
我有这样的字符串:
[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
我应该如何修改我的正则表达式以删除 :
之后的部分?
它是字符串中 :
的第二个实例。
你可以使用这个模式:
~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is
请注意,我没有从第一个字符 class 中排除 :
来处理 url 中的最终 login/pass 并确保找到最后 :
使用回溯。所以
$result = preg_replace('~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is', '<a href=""></a>', $text);
部分详情:([^]]+):[^]]*]
[^]]
是匹配除]
.
以外所有字符的字符class
[^]]+
将匹配所有字符直到结束 ]
但正则表达式引擎将返回(回溯机制)直到它找到 :
使模式成功。
一旦完成,[^]]*
将匹配最后的字符直到结束 ]
我有这样的字符串:
[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
我应该如何修改我的正则表达式以删除 :
之后的部分?
它是字符串中 :
的第二个实例。
你可以使用这个模式:
~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is
请注意,我没有从第一个字符 class 中排除 :
来处理 url 中的最终 login/pass 并确保找到最后 :
使用回溯。所以
$result = preg_replace('~\[url=([^]]+):[^]]*](.*?)\[/url:[^]]*]~is', '<a href=""></a>', $text);
部分详情:([^]]+):[^]]*]
[^]]
是匹配除]
.
[^]]+
将匹配所有字符直到结束 ]
但正则表达式引擎将返回(回溯机制)直到它找到 :
使模式成功。
一旦完成,[^]]*
将匹配最后的字符直到结束 ]