如何为需要多次验证的字符串构建正则表达式

时间:2019-07-03 09:05:09

标签: regex

我正在尝试为当前正在开发的项目创建一些正则表达式。

我需要知道如何创建与以下模式的字符串匹配的正则表达式:

ABC单词单词

  1. 我需要在[A-Z]开头添加3个字母大写大写字母
  2. 接下来一些单词的所有单词必须用空格隔开,并且必须开始大写。
  3. 该字符串不能包含PM或MP作为辅助前缀。 (ABC项目经理段落)这适用于任何职位。

我想出了这个正则表达式:

(^ [A-Z] {3})(。* [A-Z] [a-z] {1,})

它可以与“ ABC创建用户”之类的字符串正常工作,但它也与“ ABCDE创建用户”,“ ABC CreAte用户”等匹配。

1 个答案:

答案 0 :(得分:1)

请注意,.*尽可能匹配除换行符以外的任何0个或多个字符,并且这种模式在验证字符串时很少有用。

您可以使用

^[A-Z]{3} (?!(?:MP|PM)\b)[A-Z][a-z]+ (?!(?:MP|PM)\b)[A-Z][a-z]+

或者,将非捕获组与有限量词一起使用:

^[A-Z]{3}(?: (?!(?:MP|PM)\b)[A-Z][a-z]+){2}
         ^^^                           ^^^^ 

请参见regex demo #1regex demo #2

如果您需要匹配两个{strong>个或更多个此类Word,请使用

^[A-Z]{3}(?: (?!(?:MP|PM)\b)[A-Z][a-z]+){2,}
                                        ^^^^

(?!(?:MP|PM)\b)[A-Z][a-z]+部分执行以下操作:

  • (?!(?:MP|PM)\b)否定前瞻检查单词是否等于MPPM,如果模式匹配,则匹配失败
  • [A-Z][a-z]+使用大写字母,后跟1+小写字母。

enter image description here