URL正则表达式模式不接受多个括号

时间:2015-05-11 11:18:57

标签: php regex

我使用以下正则表达式来识别PHP的URL:

<liferay-portlet-app>
    <portlet>
        <portlet-name>mycustom</portlet-name>
        <icon>/icon.png</icon> <--- See this
        ....
    </portlet>
</liferay-portlet-app>

在尝试匹配这样的网址之前,这种方法很有效:

(?i)\b(?!.*?\<<) 
(?!.*?\.onion) //negative lookaheads for << and .onion
((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|ftp:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)
 (?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+?
 (?:\(([^\s()<>]+|(\([^\s()<>]+\)))*?\)
 |
 [^\s`!()\[\]{};:\'".,<>?«»“”‘’])
)

只有第一个字符串才能匹配。我尝试过不正确的模式,但在匹配此网址时会导致灾难性的回溯:

http://foo.com/blah_blah_(wikipedia)_(again)
http://foo.com/blah_(wikipedia)#cite-1

重要的是,这里的所有三个例子都是完全匹配的。这是A regex101 link,它更好地概述了这个问题。

非常感谢任何帮助!

0 个答案:

没有答案