url正则表达式中双点的大小写


(http(s)?://.)?(www.)?[-a-zA-Z0-9@:%._+~#=]{2,256}.[a-z]{2,6}b([-a-zA-Z0-9@:%_+.~#?&//="]*)

regex101.com/r/vd3hHQ/1

我使用上面的正则表达式来检测输入文本中的URL。它通过了wealth.in..mutual的情况,但应该只采用wealth.in。我需要在正则表达式的最后一部分放入点的最大连续出现次数。

以前,我使用

(?:(?:https?|ftp)://|b(?:[a-zd]+.))(?:(?:[^s()<>$@,]+|((?:[^s()<>]+|(?:([^s()<>]+)))?))+(?:((?:[^s()<>]+|(?:(?:[^s()<>]+)))?)|[^s`!()[]{};:'".,<>?«»“”‘’]))

试试这个。它将检查有效的URL。

(https?://(?:www.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9].[^s]{2,}|www.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9].[^s]{2,}|https?://(?:www.|(?!www))[a-zA-Z0-9].[^s]{2,}|www.[a-zA-Z0-9].[^s]{2,})

这里有一个最小的重构,它将句点从巨大的字符范围中排除,并围绕它重新排列。(包装在多行上,这样我就可以评论发生了什么变化。(

# Beginning is the same as before
(http(s)?://.)?(www.)?
# Here, we exclude dot, and then allow it separately,
# and repeat one or more times.
# Also, DNS labels can be at most 63 characters
(?:[-a-zA-Z0-9@:%_+~#=]{1,63}.)+
# Same as before
[a-z]{2,6}b
# A similar refactoring occurred here
((?:[-a-zA-Z0-9@:%_+~#?&//="]+.)*
# Same as before
[-a-zA-Z0-9@:%_+~#?&//="]+)?

Regex101演示:https://regex101.com/r/zRTeTI/2

我没有审查过这是否正确;通常,你在互联网上找到的URL正则表达式都有缺陷,所以要小心。例如,这至少在IDNA顶级域名上仍然会失败。

最新更新