*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号位再次尝试。

相关内容

  • 没有找到相关文章

最新更新