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

RegExp帮助(正在工作但需要排除),regex,inclusion,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]/ 这是有效的 然而,当我被告知需要从列表中排除小时数时,我被抛出了一个曲线球 我如何调整我的正则表达式以匹配所有小时数\u 3[23],但不匹配/hour

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

我有这样一份清单:

/hours_3203
/hours_3204
/hours_3205
/hours_3206
/hours_3207
/hours_3208
/hours_3309
/hours_3310
/hours_3211
我使用此正则表达式查找以32或33开头的所有条目:

/hours_3[23]/
这是有效的

然而,当我被告知需要从列表中排除小时数时,我被抛出了一个曲线球

我如何调整我的正则表达式以匹配所有
小时数\u 3[23]
,但不匹配
/hours\u 3211

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

/hours_3412
/hours_3413
/hours_3414
/hours_3415
/hours_3516
/hours_3517
/hours_3518
/hours_3519
我一直在使用以下正则表达式:

/hours_3[45]/
查找所有
小时数\u 34x
/hours\u 35x

我如何调整这一点:

/hours_3[45]/
要查找上述内容,但也要在
/hours\u 3211?
上查找/匹配

我如何调整我的正则表达式以匹配所有
小时数\u 3[23]
,但不匹配
小时数\u 3211

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

/hours_3(?!211)[23]/

(?!211)
是否定的前瞻,在
hours\u 3
之后不允许
211
,因此不允许
hours\u 3211
我假设您将3211添加到第二个正则表达式中,这类似于

hours_(3[45]|3211)
第一个是负面展望

hours_3[23](?!11)
我如何调整我的正则表达式以匹配所有
小时数\u 3[23]
,但不匹配
小时数\u 3211

使用负前瞻
(?!)

我如何调整
/hours\u 3[45]/
以查找上述内容,同时查找/匹配
/hours\u 3211

使用交替
|

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

更恰当地说,上面只指定它是否匹配。如果希望返回实际的完全匹配,则需要将
*
添加到RegExp的末尾,如下所示:

/hours_3(?!211)[23].*/
/hours_3(?:[45]|211).*/

谢谢你对这两部分的回答!其他所有人仍然获得了选票。这两个都对我有用:/hours|3([45]| 211)//hours|3(20 | 3)/不知道它们之间有多大区别?(这个正则表达式的力很弱!)哈哈。。。更高级的正则表达式仍然让我无法理解。
(?:)
称为非捕获组。用于分组而不与输出匹配。我假设这是JavaScript(如果我错了,请纠正我),因此如果您使用常规分组
()
,并尝试使用
String.prototype.match()
,那么您将不仅匹配整个表达式,而且
()
中的任何内容也将作为输出中的第二个匹配项输出。在这种情况下,使用
(?:)
意味着只返回您的全部匹配项。@whispers For
/hours\u 3(20 | 3)/
如果您不想匹配
hours\u 3210
之类的内容,这是可以的,因为您指定
0
必须跟在
2
后面。
/hours_3(?!211)[23].*/
/hours_3(?:[45]|211).*/