如果单个字符不止一个,则不匹配

时间:2018-04-13 17:49:40

标签: regex

我需要创建一个正则表达式来验证任何没有点的文本或任何以.gt.lt结尾的文本。任何包含多个点的文本也应无效。

anytext // valid
anytext.gt // valid
anytext.lt // valid
anytext.xx // invalid
anytext.xx.gt // invalid

我创建了这个:^.*(\.(gt|lt)|(?<!\..*))$

它的效果很好,除了它接受多于1个点的事实,因此像foo.bar.gt这样的东西正在被验证,不应该。

4 个答案:

答案 0 :(得分:2)

您可以匹配一个或多个单词字符\w+,或在字符类中指定要匹配的内容,并以可选点后跟gt或lt:

结束

^\w+(?:\.[gl]t)?$

<强>解释

  • ^在行首处断言位置
  • \w+一个或多个word characters
  • (?:非捕获组
    • \.[gl]t匹配一个点,gl后跟t
  • )?关闭非捕获组并将其设为可选
  • $断言行尾的位置

答案 1 :(得分:2)

您可以使用:

^[^.\n]+(\.(gt|lt))?$

与您的解决方案的主要区别:

  • 而不是&#34;首字母&#34; .我使用了[^.\n] - 任何角色 除了点或换行符之外。
  • 作为跟随它的量词我使用+,只接受非空内容。
  • 我放弃了第二个备选方案((?<!\..*))和前面的|
  • 在捕获组之后,我添加了?,因为.lt.gt 后缀是可选的。

还有一句话:在负面的背后,你不能使用量词 (你试过.*)。

答案 2 :(得分:1)

我认为这很简单:

^[^.]+(\.[gl]t)?$

See Regex101 demo here

答案 3 :(得分:1)

就这么简单:^\w+(\.[gl]t){0,1}$\w将匹配.gt.lt

之前的任何字符串