为什么括号在这里是强制性的?

Why is bracket mandatory here?

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

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

我的目的是匹配任何长度为 n 的字符串,使得 n5 的倍数。 在这里查看:https://regex101.com/r/sS6rW8/1.

请详细说明为什么情况 1 匹配字符串而情况 2 不匹配。

因为 {n}+ 并不代表您认为的那样。在 PCRE 语法中,这会将 {n} 变成 possessive quantifier. In other words, a{5}+ is the same as (?>a{5}). It's like the second + in the expression a++, which is the same as using an atomic group (?>a+).

这对固定长度 {n} 没有用处,但与 {min,max} 一起使用时更有意义。所以,a{2,5}+ 等价于 (?>a{2,5}).

举个简单的例子,考虑这些模式:

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

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

您的第二个示例有一个无回溯子句 {5}+,这与 (stuff{5})+

不同