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

时间:2016-02-29 06:49:40

标签: 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}$

它确实有效,但我觉得它可能更好。

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

2 个答案:

答案 0 :(得分:1)

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

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

RegEx Demo

变更是:

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

请注意,这个重构的正则表达式在regex101网站上需要106步,而正则表达式采用124步。

答案 1 :(得分:0)

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

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

请参阅live demo