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

use*_*719 0 regex perl

能否请你告诉我之间的差异\z\Z以及\a\A在Perl一个简单的例子?

rua*_*akh 14

\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/
Run Code Online (Sandbox Code Playgroud)

而这一个是假的:

"foo\n" =~ m/foo\z/
Run Code Online (Sandbox Code Playgroud)

它们的不同之处$在于它们不受/m"多行"标志的影响,该标志允许$在任何行的末尾匹配.

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

\A仅匹配字符串的开头.喜欢\z\Z不同^,它不受/m"多线"标志的影响.

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


ike*_*ami 6

  • \A 匹配位置 0 处的零个字符。
  • \z 匹配字符串末尾的零个字符。
  • \Z 匹配字符串末尾和尾随换行处的零个字符。

  • ^没有/m与 相同\A
  • ^with/m在位置 0 和换行后匹配零个字符。
  • $没有/m与 相同\Z
  • $with/m匹配字符串末尾和换行符处的零个字符。

  • \a 匹配 BEL/BELL 字符。
    • 它相当于\x07在基于 ASCII 的机器上。
    • 它相当于\x2F在基于 EBCDIC 的机器上。

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

\A                       \A is not affected by /m
^                        ^ without /m             ? \A
^/m ^/m ^/m              ^ with /m                ? \A|(?<=\n)
|   |   |
0123456789012
|   |   |
v   v   v
abc?def?ghi?
   ^   ^   ^^
   |   |   ||
0123456789012
   |   |   ||___
   |   |   |    |
   $/m $/m $/m  $/m      $ with /m                ? \z|(?=\n)
           $    $        $ without /m             ? \z|(?=\n\z)
           \Z   \Z       \Z is not affected by /m ? \z|(?=\n\z)
                \z       \z is not affected by /m
Run Code Online (Sandbox Code Playgroud)

这在perlre 中有记录。