如果我想匹配第一个模式但我想要取消匹配第二个模式,我应该在正则表达式中使用什么模式。
例如我想匹配字符串' id'只要小数不是6或9,就会跟随小数。
因此它应与id1,id2,id3 ...
等匹配,但不应与id6
和id9
匹配。
我尝试了这种模式并且无法正常工作:
"id(\d|(?!6|9))"
答案 0 :(得分:3)
您可以像这样使用negative lookahead
。
正则表达式: \bid(?![69])\d\b
说明:
\b
确保字边界。
(?![69])
否定前瞻确保该数字不是6或9。
\d
与id
后的单个数字匹配。
<强> 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 强>
如果您想检查id
或6
后面没有9
,您想要接受id16
但不是id61
等案例,那么您可以使用
\bid(?=\d)[^69]\d*\b
<强> Regex Demo 强>
答案 2 :(得分:1)
id(\d|(?!6|9))
模式与id
匹配,后跟任意1位数,或者如果没有6
或9
。 交替(\d
或(?!6|9)
)允许id6
和id9
,因为第一个替代&#34;赢了&#34;在NFA正则表达式中(即一次匹配后的其他替代方案未经过测试)。
如果您只需要id
或6
排除9
次匹配,请
\bid(?![69]\b)\d+\b
请参阅regex demo
如果您希望避免将所有id
与6
及9
匹配,请使用
\bid(?![69])\d+
此处,\d+
匹配一个或多个数字,\b
代表一个字边界(数字前面应跟着非 - &#34;字&#如果在(?![69])
之后6
或9
(有或没有单词边界检查 - 取决于您需要什么),id
前瞻和id
预测未通过匹配)。
更新
如果您需要排除号码不以6
或9
开头的\bid[0-578]\d*
,您可以使用
{{1}}
(demo)
基于Shafizadeh's评论。