* Perl 6 中的量词
* quantifier in Perl 6
这似乎是我在这里不理解的非常基础的东西。
为什么 "babc"
不匹配 / a * /
?
> "abc" ~~ / a /
「a」
> "abc" ~~ / a * /
「a」
> "babc" ~~ / a * /
「」 # WHY?
> "babc" ~~ / a + /
「a」
因为*
量词使前面的原子匹配零次或更多次。
「」
是任何字符串中 / a * /
的第一个匹配项。例如:
say "xabc" ~~ / a * . /; # OUTPUT: 「x」
一样:
say "xabc" ~~ / (a+)? . /;
如果你把模式设置得更精确一些,你会得到另一个结果:
say "xabc" ~~ / x a * /; # OUTPUT: 「xa」
say "xabc" ~~ / a * b /; # OUTPUT: 「ab」
这里的答案是正确的,我将尝试以更连贯的形式呈现它们:
匹配总是从左边开始
正则表达式引擎总是从字符串的左边开始,并且更喜欢最左边的匹配而不是较长的匹配
*
匹配空字符串
正则表达式 a*
匹配可以匹配字符串 ''
、'a'
、'aa'
等。
它总是会优先选择它找到的最长匹配项,但找不到比空字符串更长的匹配项,它只会匹配空字符串。
放在一起
在'abc' ~~ /a*/
中,正则表达式引擎从位置0开始,a*
匹配尽可能多的a,从而匹配第一个字符。
在'babc' ~~ /a*/
中,正则表达式引擎从位置0开始,而a*
只能匹配零个字符。它这样做很成功。既然整体匹配成功,就没有理由在1号位重试了。
这似乎是我在这里不理解的非常基础的东西。
为什么 "babc"
不匹配 / a * /
?
> "abc" ~~ / a /
「a」
> "abc" ~~ / a * /
「a」
> "babc" ~~ / a * /
「」 # WHY?
> "babc" ~~ / a + /
「a」
因为*
量词使前面的原子匹配零次或更多次。
「」
是任何字符串中 / a * /
的第一个匹配项。例如:
say "xabc" ~~ / a * . /; # OUTPUT: 「x」
一样:
say "xabc" ~~ / (a+)? . /;
如果你把模式设置得更精确一些,你会得到另一个结果:
say "xabc" ~~ / x a * /; # OUTPUT: 「xa」
say "xabc" ~~ / a * b /; # OUTPUT: 「ab」
这里的答案是正确的,我将尝试以更连贯的形式呈现它们:
匹配总是从左边开始
正则表达式引擎总是从字符串的左边开始,并且更喜欢最左边的匹配而不是较长的匹配
*
匹配空字符串
正则表达式 a*
匹配可以匹配字符串 ''
、'a'
、'aa'
等。
它总是会优先选择它找到的最长匹配项,但找不到比空字符串更长的匹配项,它只会匹配空字符串。
放在一起
在'abc' ~~ /a*/
中,正则表达式引擎从位置0开始,a*
匹配尽可能多的a,从而匹配第一个字符。
在'babc' ~~ /a*/
中,正则表达式引擎从位置0开始,而a*
只能匹配零个字符。它这样做很成功。既然整体匹配成功,就没有理由在1号位重试了。