Perl 6 的正则表达式

与 Perl 5 相同的部分:


## 分组捕获:

    > if 'abababc' ~~ / ('ab'+) / { say $0 }

    「ababab」

## 重复数量 `?` `+` `*` `+?` `*?`

    > if 'abcde' ~~ / ('ab'?) ('cd'+) ('e'*) / { say "$0 $1 $2" }

    ab cd e

## 反斜杠字符集 \w \s \d \n \t \v

    > if 'abcde' ~~ / \w+ / { say 'match' }

    match


不同的地方:

分组匿名捕获,是从 $0 开始的,而 Perl 5 是从 $1. 

    > if 'ab' ~~ / (\w+) / { say $0.Str }

    ab


固定数量符号,不再是 { $m, $n } 的形式:

    'ababab' ~~ / 'ab' ** 1..3 /

    'ababab' ~~ / 'ab' ** 3 /

    'ababab' ~~ / 'ab' ** 1..* /


字符串也出现在正则表达式中,也是一种不捕获匿名分组:

     > 'ababa\w+' ~~ / 'ababa\w+' /

     True

      >  'cde*?' ~~ / "cde*?" /

      True


字符类现在用尖括号包围起来了:


    ‘abcd' ~~ / <[abcd]>+ /

       'abcd' ~~ / <[\w]>+ /


既然包围起来了,就能进行一些求并集和差集的计算了:


        ‘abcd123' ~~ / <[abcd] + [123]> /


字符集求反不再是 [^abc] 的格式:


    'zzz' ~~ / <-[abc]> /



你可能感兴趣的:(Perl 6 的正则表达式)