所以我使用以下正则表达式来匹配元素中的url:
(<.*?>)((?:https?:\/\/)?(?:www\.)?)([\w-]+)((?:\.\w+)(?:\.\w+)*)(.*?)(<\/.*?>)
到目前为止,此工作正常,但它也会匹配这些元素:
<b>I.Am.Not.A.Url</b>
这是因为我的表达式正在寻找http://
或https://
后跟www.
,除非它们都是可选的。因此,即使这些都不存在,它也会匹配。
我希望能够做的是,如果字符串中存在其中一个或全部,则匹配:
<b>http://website.com/</b> - Match
<b>http://www.website.com/</b> - Match
<b>https://website.com/</b> - Match
<b>https://www.website.com/</b> - Match
<b>www.website.com</b> - Match
<b>website.com</b> - No match
答案 0 :(得分:1)
由于(?:https?:\/\/)?(?:www\.)?
匹配可选的https://
或http://
,然后是可选的www.
,因此您将获得缺少这些模式的匹配项。
要求其中一个,请将此模式部分转换为替换:
(https?:\/\/(?:www\.)?|www\.)
这将使其匹配
https?:\/\/(?:www\.)?
- 一个带有可选www.
的协议|
- 或www\.
- www.
子字符串。