正则表达式域不会获取域 co.uk 的 .uk

  • 本文关键字:uk co 正则表达式 获取 regex
  • 更新时间 :
  • 英文 :


使用组 1,我得到了域的名称。但是组 2 不会获得域的UK

这是正则表达式中的代码: https://regex101.com/r/Svg7KY/1

First try:   /^(?:https?://)?(?:[^@n]+@)?(?:www.)?([^.]+)((?:[.,]w+))/gm
Second try: /^(?:https?://)?(?:[^@n]+@)?(?:www.)?([^.]+)([,.](?=[^.,]*$)w+)/gm
nu.co.uk
www.nu.co.uk
http://www.nu.co.uk
https://www.nu.co.uk

如果要捕获第二个捕获组中的uk,则可以重复 0 次或多次,匹配一个点,后跟 1+ 个单词字符。

然后匹配一个点并捕获第 1 组中的最后一个单词字符

^(?:https?://)?(?:[^@n]+@)?(?:www.)?([^.]+)(?:[.,]w+)*.(w+)

关于最后一部分(?:[.,]w+)*.(w+)

  • (?:非捕获组
    • [.,]w+匹配点或逗号和 1+ 单词字符
  • )*关闭组并重复 0+ 次
  • .匹配一个点
  • (w+)捕获组 2,匹配 1+ 单词字符

正则表达式演示

我查看了您提供的链接中的正则表达式。它与"uk"不匹配的原因是因为这些示例比其他示例具有更多的.w+出现次数。您可以向最后一个组添加一个量词以使其工作:

^(?:https?://)?(?:[^@n]+@)?(?:www.)?([^.]+)((?:[.,]w+)){1,2}

另外,最后一个组的字符类中是否需要逗号?如果没有,您可以将正则表达式简化为:

^(?:https?://)?(?:[^@n]+@)?(?:w+)(?:.w+)+

最新更新