我使用以下正则表达式来识别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,它更好地概述了这个问题。
非常感谢任何帮助!