正如标题所示,我希望我的模式与字符串中的URL匹配,除了 BBCode标记之间的URL。
到目前为止,我已经创建了一个与[img]
标记之间的网址不匹配的模式,但没有足够的正则表达式技能使其适用于所有标记,例如更高级的标记([url=xxx]yyy[/url]
等等)。所以要明确:[
和]
之间的 应匹配。
这是我的工作示例与[img]标记之间的URL不匹配:
http://regexr.com/v1?38mae(由于编码混乱,可能必须粘贴以下模式)
模式:
(?<!\[img])(((http|ftp|https):\/\/)|www\.)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#!]*[\w\-\@?^=%&/~\+#])
我会感激任何帮助!
答案 0 :(得分:4)
您可以在模式的开头添加:
\[[^]]*](*SKIP)(*FAIL)|
此子模式将找到方括号之间的所有内容,使模式失败并强制不重试子字符串。
您的模式示例(~
作为分隔符):
$pattern = '~\[[^]]*](*SKIP)(*FAIL)|
(?<!\[img])
(?:(?:ht|f)tps?://|www\.)
[\w-]+
(?:\.[\w-]+)+
[\w-.,@?^=%&:/\~+#!]*[\w-@?^=%&/\~+#]~xiu';