Perl的。使用{x,y}元字符时,正则表达式不匹配

时间:2014-01-10 06:25:42

标签: regex perl

我正在尝试使用{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次'*

如果我读的是正确的?那么为什么第二个不匹配?

3 个答案:

答案 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}表达式的第一个参数。