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).*/