Perl中\ z和\ Z与\ a和\ A之间的区别

时间:2015-09-11 15:23:18

标签: regex perl

您能告诉我Perl中\z\Z以及\a\A之间的区别吗?

2 个答案:

答案 0 :(得分:12)

\z仅匹配字符串的最后一部分。

\Z也匹配字符串的最后一行,但如果字符串以换行符结尾,则\Z也会在换行符之前立即匹配。

所以,例如,这五个是真的:

'foo' =~ m/foo\z/
'foo' =~ m/foo\Z/
"foo\n" =~ m/foo\Z/
"foo\n" =~ m/foo\n\z/
"foo\n" =~ m/foo\n\Z/

而这一个是假的:

"foo\n" =~ m/foo\z/

它们与$的不同之处在于它们不受/m“多行”标记的影响,该标志允许$在任意行的末尾匹配。

\a表示警报(铃声)字符;它在正则表达式中没有任何额外的特殊含义。

\A仅在字符串的开头匹配。与\z\Z一样,与^不同,它不受/m“多行”标记的影响。

所有这些都记录在perlre,Perl正则表达式手册页中:http://perldoc.perl.org/perlre.html

答案 1 :(得分:3)

以下表示相关正则表达式模式匹配的位置(表示换行符):

\A                       \A is not affected by /m
^                        ^ without /m             ≡ \A
^/m  ^/m  ^/m            ^ with /m                ≡ \A|(?<=\n)
|    |    |
|    |    |
v    v    v
abc␊def␊ghi␊
   ^    ^    ^^
   |    |    ||___
   |    |    |    |
   $/m  $/m  $/m  $/m    $ with /m                ≡ (?=\n)|\z
             $    $      $ without /m             ≡ (?=\n\z)|\z
             \Z   \Z     \Z is not affected by /m ≡ (?=\n\z)|\z
                  \z     \z is not affected by /m

\a相当于\x07,这意味着它匹配字符0x07(ASCII和UNICODE中的BEL / BELL)。

perlre中记录了这一点。