这个正则表达式可以改进吗?

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


这是我想要匹配的:

this_is.ok.com
this_is.another_valid.domain.com

这里有一些我不想匹配的字符串:

this_one.is_not_ok.com
not_ok.com
also.not_ok

即,除最终或倒数第二部分外,任何部分都可以有下划线。

我想出的正则表达式:

^([a-zA-Z0-9-_]{0,63}?.)*([a-zA-Z0-9-]{0,63}?.){1}([a-zA-Z0-9-]{0,63}?){1}$

它似乎确实有效,但我觉得它可以更好。

注意:请不要讨论域名中的下划线。只需评论正则表达式。

您可以使用此重构和较小的正则表达式:

^([w-]{1,63}?.)*([a-zA-Z0-9-]{1,63}.)([a-zA-Z0-9-]{2,63})$

正则表达式演示

更改包括:

  • w - [a-zA-Z0-9_]的快捷方式
  • 必须在字符类中的第一个或最后一个位置保留连字符
  • {1}是不必要的,应该取出
  • {0,63}应至少{1,63}

请注意,这个重构的正则表达式在正则表达式 101 站点上需要 106 个步骤,而您的正则表达式需要 124 个步骤。

假设"改进"意味着"缩短":

^(w+.)+p{L}+.p{L}+$

观看现场演示。

最新更新