您能告诉我Perl中\z
和\Z
以及\a
和\A
之间的区别吗?
答案 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中记录了这一点。