这似乎是我在这里不理解的非常基本的东西。
为什么"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号位再次尝试。