1。 ^([0-9A-Za-z]{5})+$
VS
2。 ^[a-zA-Z0-9]{5}+$
我的目的是匹配任何长度n
的字符串,使n
是5
的倍数。
点击此处:https://regex101.com/r/sS6rW8/1。
请详细说明案例1与字符串匹配的原因,而案例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})+
不同