Максвелл Трой Милтон Кинг прав, но поскольку его ответ немного короток, я также опубликую это и приведу несколько примеров для иллюстрации.
Во-первых, метасимвол .
по умолчанию НЕ соответствует разрывам строк. Это верно для многих реализаций регулярных выражений, в том числе для PHP. Тем не менее, возьмите текст:
$text = "Line 1\nLine 2\nLine 3";
и регулярное выражение
'/.*/'
, тогда регулярное выражение будет соответствовать только Line 1
. Убедитесь сами:
preg_match('/.*/', $text, $match);
echo $match[0]; // echos: 'Line 1'
, поскольку .*
"прекращает сопоставление" в \n
(символ новой строки). Если вы хотите, чтобы оно совпадало и с переносами строк, добавьте s-модификатор (он же модификатор DOT-ALL) в конце вашего регулярного выражения:
preg_match('/.*/s', $text, $match);
echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3'
Теперь о m-модификаторе (многострочном): это позволит ^
соответствовать не только началу входной строки, но и началу каждой строки. То же самое с $
: это позволит $
соответствовать не только концу входной строки, но и концу каждой строки.
Пример:
$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/', $text, $matches);
print_r($matches);
, который будет соответствовать только 3 (в конце ввода). Но:
, но с включенным m-модификатором:
$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/m', $text, $matches);
print_r($matches);
все (одиночные) цифры в конце каждой строки («1», «2» и «3») совпадают.