不匹配BBCode标记之间的URL

时间:2014-05-17 19:28:10

标签: php regex preg-match bbcode

正如标题所示,我希望我的模式与字符串中的URL匹配,除了 BBCode标记之间的URL。

到目前为止,我已经创建了一个与[img]标记之间的网址不匹配的模式,但没有足够的正则表达式技能使其适用于所有标记,例如更高级的标记([url=xxx]yyy[/url]等等)。所以要明确:[]之间的 应匹配。


这是我的工作示例与[img]标记之间的URL不匹配:

http://regexr.com/v1?38mae(由于编码混乱,可能必须粘贴以下模式)

模式:

(?<!\[img])(((http|ftp|https):\/\/)|www\.)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#!]*[\w\-\@?^=%&/~\+#])

我会感激任何帮助!

1 个答案:

答案 0 :(得分:4)

您可以在模式的开头添加:

\[[^]]*](*SKIP)(*FAIL)|

此子模式将找到方括号之间的所有内容,使模式失败并强制不重试子字符串。

您的模式示例(~作为分隔符):

$pattern = '~\[[^]]*](*SKIP)(*FAIL)|
             (?<!\[img])
             (?:(?:ht|f)tps?://|www\.)
             [\w-]+
             (?:\.[\w-]+)+
             [\w-.,@?^=%&:/\~+#!]*[\w-@?^=%&/\~+#]~xiu';