我正在尝试使用{x,y}
元字符,所以请帮助理解为什么
1. 'Hello' =~ /\w{2,}/; # Returns true. while..
2. 'Hello' =~ /\w{,6}/; # ..returns false ??!
\w{2,}
代表*'匹配[0-9A-Za-z_]字符至少2次'*
\w{,6}
代表*'匹配[0-9A-Za-z_]字符最多6次'*
如果我读的是正确的?那么为什么第二个不匹配?
答案 0 :(得分:4)
根据perlre documentation -- Quantifiers,仅识别*
,+
,?
,{n}
,{n,}
,{n,m}
:
以下标准量词得到承认:
* Match 0 or more times + Match 1 or more times ? Match 1 or 0 times {n} Match exactly n times {n,} Match at least n times {n,m} Match at least n but not more than m times
- > /{,6}/
字面上匹配'{,6}'
。
根据您的需要使用/\w{0,6}/
或/\w{1,6}/
。
答案 1 :(得分:3)
{n,m}
表达式的第一个参数是必需的。请参阅perlre
手册页,例如:
{n} Match exactly n times
{n,} Match at least n times
{n,m} Match at least n but not more than m times
无法识别{,m}
之类的模式。如果您明确地将第一个参数设为1,则它起作用:
print 'Hello' =~ /\w{1,6}/;
生成“1”。
答案 2 :(得分:3)
实际上:
\w{n,m}
表示最少匹配字母数字n次,但最多m次。
\w{n,}
表示匹配字母数字n次或更多次。
\w{n}
表示完全匹配字母数字n次。
然而:
\w{,m}
表示匹配字母数字后跟文字{,m}
。这是因为n是必需的;您必须指定{n,m}
表达式的第一个参数。