-2

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

我有一个这样的列表:

/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?

4

3 回答 3

4

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

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

/hours_3(?!211)[23]/

(?!211)在因此不允许211之后是负面的前瞻性不允许hours_3hours_3211

于 2016-05-02T22:16:01.380 回答
1

我假设您将 3211 添加到第二个正则表达式中,这将是这样的......

hours_(3[45]|3211)

第一个将是负前瞻

hours_3[23](?!11)
于 2016-05-02T22:22:04.633 回答
1

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

使用负前瞻(?!)

/hours_3(?!211)[23]/

我如何调整/hours_3[45]/以找到上述内容但也可以找到/匹配/hours_3211

使用交替|

/hours_3(?:[45]|211)/

编辑:

更恰当地说,上面只指定它是否匹配。如果你想返回实际的完整匹配,你想像这样添加.*到 RegExp 的末尾:

/hours_3(?!211)[23].*/
/hours_3(?:[45]|211).*/
于 2016-05-02T22:24:34.687 回答