(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//="]*)
我正在使用上面的正则表达式来检测输入文本中的网址。它通过了wealth.in..mutual
的情况,但取而代之的是wealth.in
。
我需要在正则表达式的最后部分放置点的最大连续出现次数。
以前,我在使用
(?:(?:https?|ftp):\/\/|\b(?:[a-z\d]+\.))(?:(?:[^\s()<>$@,]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))?\))+(?:\((?:[^\s()<>]+|(?:\(?:[^\s()<>]+\)))?\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
答案 0 :(得分:0)
试试这个。它将检查有效的网址。
(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,})
答案 1 :(得分:0)
这是一个最小的重构,它从巨大的字符范围中排除了点,并重新排列了周围的内容。 (包裹在多行中,以便我可以对更改内容进行评论。)
# 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 TLD上仍然失败。