我使用以下正则表达式模式从[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
,并保留其余的网址标记。
我已经尝试了很多在我的正则表达式模式中找到问题但失败了。谁有想法?
答案 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';
这样可以防止它在执行模式表达时跳出[]。