繁体   English   中英

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

[英]How do you do this conditional situation with regular expression?

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

它就像域名:

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

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

必须以[az]部分结束,你可以检查一个正的lookbehind (?<=[az])给出这个完整的正则表达式:

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

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

如果至少有一个点,则已经保证它将以[az]结束,因为该测试位于点所属的组中。 如果没有点,则需要在末尾强制[az] 为此,您可以将一个或多个量词( + )转换为零或更多( * ),并在没有“点组”时强制结束为[az] 当有点组时,您可以保持相同的模式,但现在至少有一个必需的点。

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

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

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

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

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

这将匹配不包括点但以字母结尾的字符串(除上述之外),例如yahoo ,但不包括yahoo2

尝试这个:

^[a-z0-9](\.[a-z]{2,4}|.*[a-z]$)
^[a-z0-9](?=[^.]*\.[^.]+$|[^.]*\.[^.]\.[^.]+$)(\.(?=[a-z][a-z]){1,2}).*[a-z]$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM