* Perl 6中的量词

时间:2018-12-07 21:33:12

标签: regex match perl6 quantifiers

这似乎是非常基本的东西,我在这里不明白。

为什么update autos set risico = 0 where in (select leden.lidnaam, count(deelnemers.evenementnr) as AantalDeelnames from leden full join autos on leden.lidnr = autos.lidnr full join deelnemers on autos.autonr = deelnemers.autonr group by leden.lidnaam having AantalDeelnames = 0) docker-compose run web python3 manage.py populatedb --createsuperuser 不匹配?

"babc"

2 个答案:

答案 0 :(得分:8)

因为*量词使前一个原子匹配或多次。

「」是任何字符串中/ a * /的第一个匹配项。例如:

say "xabc" ~~ / a * . /; # OUTPUT: 「x」

是相同的:

say "xabc" ~~ / (a+)? . /;

如果您将模式设置得更精确,则会得到另一个结果:

say "xabc" ~~ / x a * /; # OUTPUT: 「xa」
say "xabc" ~~ / a * b /; # OUTPUT: 「ab」

答案 1 :(得分:7)

这里的答案是正确的,我将尝试以更连贯的形式展示它们:

匹配总是从左侧开始

regex引擎始终从字符串的左侧开始,并且比最长时间的匹配更喜欢最左侧的匹配

*匹配空字符串

正则表达式a*匹配项可以匹配字符串'''a''aa'等。 它总是会选择找到的最长匹配项,但是找不到比空字符串更长的匹配项,它只会匹配空字符串。

放在一起

'abc' ~~ /a*/中,正则表达式引擎从位置0开始,a*匹配尽可能多的a,从而匹配第一个字符。

'babc' ~~ /a*/中,正则表达式引擎从位置0开始,a*只能匹配零个字符。这样做成功。由于整体比赛成功,因此没有理由在位置1再次尝试。