你如何用正则表达式做这个条件情况?

Yoy*_*o_c 6 javascript php regex perl

  1. 用字母数字开始 ^[a-z0-9]
  2. 然后是这个可选的点 \.?
  3. 如果有一个点,则必须跟随2到4个字母 [a-z]{2,4}
  4. 它必须以字母结尾 [a-z]$
  5. 它必须是一个点,最多只有两个点.

它就像域名:

yahoo.co.uk或者yahoo.com,但是你不能这样做yahoo.co.u或者这样yahoo.co.,是的.

R. *_*des 7

您可以将可选点与必须遵循的2-4个字符分组:(\.[a-z]{2,4}).也就是说,你将要么没有,要么最多有两组点+字母字符(\.[a-z]{2,4}){0,2}.

必须以[a-z]部分结束,你可以检查一下积极的lookbehind (?<=[a-z])给这个作为完整的正则表达式:

^[a-z0-9]+(\.[a-z]{2,4}){0,2}(?<=[a-z])$
Run Code Online (Sandbox Code Playgroud)

这将适用于Perl和PHP正则表达式(PCRE),但不适用于JavaScript,因为它不支持lookbehind.在这种特定情况下,您可以解决该限制.

如果至少有一个点,则已经保证它将以最终结束[a-z],因为该测试位于点所属的组中.如果没有点,则需要[a-z]在最后强制执行.要做到这一点,您可以将一个或多个量词(+)转换为零或更多(*),并在[a-z]没有"点组"时强制结束.当有点组时,您可以保持相同的模式,但现在至少有一个必需的点.

^([a-z0-9]*[a-z]|[a-z0-9](+\.[a-z]{2,4}){1,2})$
Run Code Online (Sandbox Code Playgroud)


use*_*786 5

这将检查以字符串开头,[a-z][0-9]然后包含一个或两个点,后跟2/4字母.它的工作原理(在Python,至少)为例子,你提供的(真实的yahoo.co.ukyahoo.com假的yahoo.co.uyahoo.co.)

^[a-z0-9]+(\.[a-z]{2,4}){1,2}$
Run Code Online (Sandbox Code Playgroud)

编辑 - 重新阅读后,我想你可能想要这个:

^[a-z0-9]*([a-z0-9](\.[a-z]{2,4}){1,2}$|[a-z]$)
Run Code Online (Sandbox Code Playgroud)

这将匹配不包括点但以字母结尾的字符串(除了上述内容),例如yahoo但不是yahoo2.


Boh*_*ian -1

尝试这个:

^[a-z0-9](\.[a-z]{2,4}|.*[a-z]$)
Run Code Online (Sandbox Code Playgroud)