正则表达式如何匹配多种模式

时间:2016-04-04 09:29:26

标签: regex

如果我想匹配第一个模式但我想要取消匹配第二个模式,我应该在正则表达式中使用什么模式。

例如我想匹配字符串' id'只要小数不是6或9,就会跟随小数。

因此它应与id1,id2,id3 ...等匹配,但不应与id6id9匹配。

我尝试了这种模式并且无法正常工作:

"id(\d|(?!6|9))"

3 个答案:

答案 0 :(得分:3)

您可以像这样使用negative lookahead

正则表达式: \bid(?![69])\d\b

说明:

  • \b确保字边界。

  • (?![69])否定前瞻确保该数字不是6或9。

  • \did后的单个数字匹配。

<强> Regex101 Demo

答案 1 :(得分:3)

它不是最佳解决方案,但您也可以使用positive look ahead作为

执行此操作
\bid(?=\d)(?:\d\d+|[^69])\b

正则表达式细分

\b #word boundary
  id  #Match id literally
  (?=\d) #Find if the next position contains digit (otherwise fails)
  (?:  #Non capturing group
     \d\d+  #If there are more than one digits then match is success
       |    #OR (alternation)
     [^69]  #If its single digit don't match 6 or 9
  )   #End of non capturing group
\b

<强> Regex Demo

如果您想检查id6后面没有9,您想要接受id16但不是id61等案例,那么您可以使用

\bid(?=\d)[^69]\d*\b

<强> Regex Demo

答案 2 :(得分:1)

id(\d|(?!6|9))模式与id匹配,后跟任意1位数,或者如果没有69交替\d(?!6|9))允许id6id9,因为第一个替代&#34;赢了&#34;在NFA正则表达式中(即一次匹配后的其他替代方案未经过测试)。

如果您只需要id6排除9次匹配,请

\bid(?![69]\b)\d+\b

请参阅regex demo

如果您希望避免将所有id69匹配,请使用

\bid(?![69])\d+

请参阅another regex demo

此处,\d+匹配一个或多个数字\b代表一个字边界(数字前面应跟着非 - &#34;字&#如果在(?![69])之后69(有或没有单词边界检查 - 取决于您需要什么),id前瞻和id预测未通过匹配)。

更新

如果您需要排除号码不以69开头的\bid[0-578]\d* ,您可以使用

{{1}}

demo

基于Shafizadeh's评论。