这是我想要匹配的:
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}+$
观看现场演示。