0

我正在使用以下正则表达式模式来获取值[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并保留其余的 URL 标记。我已经尝试了很多在我的正则表达式模式中找到问题但失败了。有人知道吗?

4

1 回答 1

1

您的 URL 搜索按预期工作,也就是说,如果您列出的 /URL 不正确,或者您匹配的模式与您提供给我们的模式不同。

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

将得到

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

对于上面的正则表达式。

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

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

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

于 2013-04-14T13:38:44.860 回答