RegExp帮助(工作但需要排除)

时间:2016-05-02 22:12:07

标签: regex inclusion

我需要一些正则表达式帮助。

我有一个这样的清单:

/hours_3203
/hours_3204
/hours_3205
/hours_3206
/hours_3207
/hours_3208
/hours_3309
/hours_3310
/hours_3211

我正在使用此正则表达式查找以32或33开头的所有条目:

/hours_3[23]/

这是有效的。

但是当我被告知需要排除 hours_3211来匹配此列表时,我被抛出一个曲线球。

如何调整我的正则表达式以匹配所有hours_3[23]但不匹配/hours_3211

或者,当我有这样的列表时:

/hours_3412
/hours_3413
/hours_3414
/hours_3415
/hours_3516
/hours_3517
/hours_3518
/hours_3519

我一直在使用正则表达式:

/hours_3[45]/

找到所有hours_34x/hours_35x

我如何调整:

/hours_3[45]/

/hours_3211?找到上述但查找/匹配?

3 个答案:

答案 0 :(得分:4)

  

如何调整我的正则表达式以匹配所有hours_3[23]但不匹配hours_3211

您可以使用插入负前瞻子模式:

/hours_3(?!211)[23]/

(?!211)211因此禁止hours_3

之后禁止hours_3211为负面预测

答案 1 :(得分:1)

我假设您在第二个正则表达式中添加了3211,就像这样....

hours_(3[45]|3211)

第一个是否定前瞻

hours_3[23](?!11)

答案 2 :(得分:1)

  

如何调整我的正则表达式以匹配所有hours_3211但不匹配(?!)

使用否定前瞻/hours_3(?!211)[23]/

/hours_3[45]/
  

我如何调整/hours_3211以找到上述内容,但又在|找到/匹配?

使用交替/hours_3(?:[45]|211)/

.*

修改

更合适的是,以上仅指定它是否匹配。如果您想要返回实际的完整匹配,您希望将/hours_3(?!211)[23].*/ /hours_3(?:[45]|211).*/ 添加到RegExp的末尾,如下所示:

CheckActivity check = new CheckActivity();