为什么括号在这里是强制性的?
Why is bracket mandatory here?
1。 ^([0-9A-Za-z]{5})+$
对
2。 ^[a-zA-Z0-9]{5}+$
我的目的是匹配任何长度为 n
的字符串,使得 n
是 5
的倍数。
在这里查看: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})+
不同
1。 ^([0-9A-Za-z]{5})+$
对
2。 ^[a-zA-Z0-9]{5}+$
我的目的是匹配任何长度为 n
的字符串,使得 n
是 5
的倍数。
在这里查看: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})+