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

    @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"
    }
    */
    Ответ написан
    3 комментария