正则表达式模式仅在有一个[URL]标记时才有效

时间:2013-04-14 13:32:25

标签: php regex

我使用以下正则表达式模式从[URL=http://www.google.com]Google[/URL]

获取值
$pattern = '/\[\s*URL(.+?)?\s*\](.+?)\[\s*\/URL\s*\]/i';

虽然只有一个[URL]...[/URL],但效果很好。如果有一个包含多个[URL]....[/URL]的字符串,则会给出错误的值

例如,对于以下字符串

$string = '[URL=http://www.google.com]Google[/URL] another website [URL]www.youtube.com[/URL]';

它将第一个匹配项输出为]http://www.freshupnow.com[/URL,并保留其余的网址标记。 我已经尝试了很多在我的正则表达式模式中找到问题但失败了。谁有想法?

1 个答案:

答案 0 :(得分:1)

您的网址搜索按预期工作,即您列出的/ URL不正确,或者您匹配的模式与您提供的模式不同。

$pattern = '/\[\s*URL(.+?)?\s*\](.+?)\[\s*\/URL\s*\]/i';

会得到

([URL=http://www.google.com]Google[/URL] another website [URL)
(]www.freshupnow.com)
([/URL])

以上的RegEX。

如果您希望它不会跳出系统,您可以稍微将RegEx更改为

$pattern = '/\[\s*URL([^\]]+?)?\s*\](.+?)\[\s*\/URL\s*\]/i';

这样可以防止它在执行模式表达时跳出[]。