* 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号位重试了。