Perl 6 的正则表达式

它保留了 Perl5 的一些特性:

  • 分组捕获: (...)
  • 数量声明: + * ? +? *? ??
  • 字符转义: \t \b \n \r
  • 分支: |
  • 内置字符集: \w \d \s \h \v

Perl6的正则中,除了 a-z, A-Z,_`` 之外,都可能是特殊符号。

  • 字符串字面量 'a+b', "a+b"
    字符串字面量将匹配和它们一样的字符,其中所有的字符都是普通字符。

  • 空格 'a+b' "b+c"
    在 Perl6 默认的正则序列中,空格是被忽略的,这样就可以插入任意注释。
    来增加表达式的可读性。

  • 注释 #
    'a+b' # match 'a+b'
    注释从井号开始,直到行的末尾

  • 匹配数量限定 (ab) ** 1,5

  • 最长匹配分支 ||
    这是 Perl6 新增的特性,使用这个符号的分支,最终胜出的将是匹配字符长度
    最长的那个分支
    'a+b' || 'a+b+c' || 'a+b+c+d'

  • 标量内插 $var
    标量内插的效果和将标量代表的字符串的字面量写出来是一样的。
    相当于 Perl5 的 \Q$var\E

  • 数组内插 @array
    数组内插建立了一个字符串字面量的分支
    @array[0] | @array[1] | @array[2]

  • 不捕获分组 [...]
    不再是 (?:...), 这样可以少写一个字符。

  • 自定义字符集
    不再是 [...],这种写法分配给了不捕获分组,那么自定义字符集用什么呢?
    <[...]>, 字符集取反是 <-[...]>. 因为字符集不能嵌套,也无须嵌套。
    所以 [...] 的记法分配给了用处更广泛的非捕获分组。

  • 任意字符 .
    点可以匹配任意字符,包括回车符 \n

  • 内置正则子表达式 <ident> <ws> <ww>
    内置正则子表达式默认会进行命名捕获,捕获的名称就是尖括号中间的值。
    <.ident> <.ww> 前导点的形式,是不进行捕获的意思。

  • 向前看零宽断言 <before pattern>
    如果前面(字符串右边)将会匹配 pattern 的话,才算匹配,但并不会让匹配指针发生位移。
    pattern 取反,用 <!before pattern>

  • 向后看零宽断言 <after pattern>
    如果后面(字符串左边)已经匹配了 pattern 的话,才算匹配,也不消耗匹配字符串。
    pattern 取反,用 <!after pattern>

作者:perlvim
时间:2015-1-25
(完)

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