为什么括号必须在这里?

时间:2015-02-26 19:56:58

标签: regex pcre

1。 ^([0-9A-Za-z]{5})+$

VS

2。 ^[a-zA-Z0-9]{5}+$

我的目的是匹配任何长度n的字符串,使n5的倍数。 点击此处:https://regex101.com/r/sS6rW8/1

请详细说明案例1与字符串匹配的原因,而案例2则不然。

2 个答案:

答案 0 :(得分:4)

因为{n}+并不代表您的想法。在PCRE语法中,这会将{n}变为possessive quantifier。换句话说,a{5}+(?>a{5})相同。它类似于表达式+中的第二个a++,与使用atomic group (?>a+)相同。

这与固定长度{n}无关,但与{min,max}一起使用时更有意义。因此,a{2,5}+相当于(?>a{2,5})

作为一个简单的例子,请考虑以下模式:

^(a{1,2})(ab)    will match  aab -> $1 is "a", $2 is "ab"
^(a{1,2}+)(ab)   won't match aab -> $1 consumes "aa" possessively and $2 can't match

答案 1 :(得分:4)

^([0-9A-Za-z]{5})+$中,您说任何数字或字母5个字符长1次或更多次。 +位于整个群组(括号内的任何内容),而{5}位于[0-9A-Za-z]

您的第二个示例没有回溯条款{5}+,与(stuff{5})+不同