2010-10-26 4 views

ответ

8

Да. \A будет соответствовать в самом начале вашей ценности. ^ будет соответствовать началу значения, но также будет соответствовать сразу после строк новой строки в многострочном режиме (//m).

\Z похоже, но с окончанием значения. Тем не менее, это будет также матч перед новой строкой в ​​конце значения. Если вы не хотите этого поведения, используйте \z, который соответствует только в конце значения.

Полезные ссылки: perlre manpage

+0

Этот ответ был добавлен к [Stack Overflow Regular Expression FAQ] (http://stackoverflow.com/a/22944075/2736496) под заголовком "якорей". – aliteralmind

2

Да, в соответствии с documentation:

The \ A, \ Z и \ Z утверждения отличаются от традиционного циркумфлекса и доллара (как описано в следующем разделе) в том, что они только когда-либо соответствовать в самом начале и конце строки темы, любые параметры set.

4

Если у вас есть это в качестве цели или строки темы:

Line 1\n 
Line 2\n 
Line 3\n 

Регулярное выражение /^Line/gm будет соответствовать все три линии. Якорь ^ соответствует первой части строки или после логического CR/LF, если присутствует флаг /m.

Регулярное выражение /\ALine/gm будет соответствовать только первой строке независимо от того, что. Утверждение \A соответствует только в абсолютном начале целевой или предметной строки независимо от флага /m.

0

Если вы читаете perldoc perlretut, это экстракт, который является полезным для вашего понимания.

· s modifier (//s): Treat string as a single long line. '.' matches any character, even "\n". "^" matches only at the beginning of the string 
     and "$" matches only at the end or before a newline at the end. 

    · m modifier (//m): Treat string as a set of multiple lines. '.' matches any character except "\n". "^" and "$" are able to match at the start 
     or end of any line within the string. 

    · both s and m modifiers (//sm): Treat string as a single long line, but detect multiple lines. '.' matches any character, even "\n". "^" and 
     "$", however, are able to match at the start or end of any line within the string. 

    Here are examples of "//s" and "//m" in action: 

     $x = "There once was a girl\nWho programmed in Perl\n"; 

     $x =~ /^Who/; # doesn't match, "Who" not at start of string 
     $x =~ /^Who/s; # doesn't match, "Who" not at start of string 
     $x =~ /^Who/m; # matches, "Who" at start of second line 
     $x =~ /^Who/sm; # matches, "Who" at start of second line 

     $x =~ /girl.Who/; # doesn't match, "." doesn't match "\n" 
     $x =~ /girl.Who/s; # matches, "." matches "\n" 
     $x =~ /girl.Who/m; # doesn't match, "." doesn't match "\n" 
     $x =~ /girl.Who/sm; # matches, "." matches "\n" 

    Most of the time, the default behavior is what is wanted, but "//s" and "//m" are occasionally very useful. If "//m" is being used, the start of 
    the string can still be matched with "\A" and the end of the string can still be matched with the anchors "\Z" (matches both the end and the 
    newline before, like "$"), and "\z" (matches only the end): 

     $x =~ /^Who/m; # matches, "Who" at start of second line 
     $x =~ /\AWho/m; # doesn't match, "Who" is not at start of string 

     $x =~ /girl$/m; # matches, "girl" at end of first line 
     $x =~ /girl\Z/m; # doesn't match, "girl" is not at end of string 

     $x =~ /Perl\Z/m; # matches, "Perl" is at newline before end 
     $x =~ /Perl\z/m; # doesn't match, "Perl" is not at end of string 
Смежные вопросы