@juni0r

В чем разница между \A и \Z, и ^ и $ (регулярные выражения) ?

Как я понял, \A и ^ соответствует началу строки, а $ и \Z концу, только в случае с \A \Z под строкой имеется ввиду string, а под ^ $ line. В чем разница - загадка.
На стэке нашел такой вот ответ:
\A and \Z are not the same thing as ^ and $. ^ and $ are the start and end of line anchors, whereas \A and \Z are the start and end of string anchors.

Но он только добавил новых вопросов, что такое line achors и string anchors?

В источнике рассматривается пример выражения для проверки даты, автор утверждает, что
/^\d{4}-\d{2}-\d{2}$/
это плохое выражение, что ^$ лучше заменить на \A \Z, если я все правильно понял, но вот почему так следует сделать, я не понимаю.
  • Вопрос задан
  • 4052 просмотра
Решения вопроса 1
@WhoMe
Сначала определимся с терминологией:
string, строка - просто набор символов, который может включать в себя символ переноса строки.
line, линия (хотя по русски мы говорим тоже строка [текста]) - набор символов без переноса строки.

^ и $ соответвсвуют началу и концу строки( string), но модификатор "m" может поменять это поведение и они будут означать начало и конец линии (line) соответсвено.
\A и \z всегда соответвсвуют началу и концу строки, модификатор "m" не оказывает на них влияния. (\Z захватывает еще и перенос строки в конце)
\A
start of subject (independent of multiline mode)
\Z
end of subject or newline at end (independent of multiline mode)
\z
end of subject (independent of multiline mode)

Видимо автор ответа предлагает дополнительно перестраховаться, если кто-то поставит модификатор m то регулярка /^\d{4}-\d{2}-\d{2}$/m будет так же пропускать ("матчить") строки вида "xss\n2014-08-31\nxss"
$str = "<some>xss</some>\n2014-08-31\n<some>xss</some>";
$r = "/^\d{4}-\d{2}-\d{2}$/m";
var_dump($r, preg_match($r, $str, $m), $m);
/*
string(22) "/^\d{4}-\d{2}-\d{2}$/m"
int(1)
array(1) {
  [0]=>
  string(10) "2014-08-31"
}
*/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
срока может быть multi-line
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы