Eug*_*sky 5 regex match perl6 quantifiers
这似乎是我在这里不理解的非常基本的东西.
为什么不"babc"匹配/ a * /?
> "abc" ~~ / a /
?a?
> "abc" ~~ / a * /
?a?
> "babc" ~~ / a * /
?? # WHY?
> "babc" ~~ / a + /
?a?
Run Code Online (Sandbox Code Playgroud)
因为*量词使前面的原子匹配零次或多次.
??是/ a * /任何字符串中的第一个匹配项.例如:
say "xabc" ~~ / a * . /; # OUTPUT: ?x?
Run Code Online (Sandbox Code Playgroud)
它是一样的:
say "xabc" ~~ / (a+)? . /;
Run Code Online (Sandbox Code Playgroud)
如果您将模式设置得更精确,您将获得另一个结果:
say "xabc" ~~ / x a * /; # OUTPUT: ?xa?
say "xabc" ~~ / a * b /; # OUTPUT: ?ab?
Run Code Online (Sandbox Code Playgroud)
这里的答案是正确的,我只是尝试以更连贯的形式呈现它们:
正则表达式引擎始终从字符串的左侧开始,并且优先选择最长匹配的最左侧匹配
* 匹配空字符串正则表达式a*匹配可以匹配字符串'','a','aa'等它总是喜欢它找到的最长匹配,但它无法找到匹配比空字符串时间越长,它只会匹配空字符串.
在'abc' ~~ /a*/,正则表达式引擎从位置0开始,a*匹配尽可能多的a,因此匹配第一个字符.
在'babc' ~~ /a*/,正则表达式引擎从位置0开始,并且a*只能匹配零个字符.它成功地做到了.由于整体比赛成功,因此没有理由在第1位再次尝试.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |