Метасимвол .
соответствует любому символу, кроме новой строки. Таким образом, шаблон .*
, который используется для сопоставления чего-либо, не будет работать, если вам также нужно сопоставить символы новой строки.
preg_match('/^.*$/',"hello\nworld"); // returns 0
[\s\S]
, который является классом символов, состоящих из пробелов и непробельных символов, соответствует любому символу, включая символ новой строки, так что [\d\D]
, [\w\W]
Итак, ваш паттерн [\s\S]*
теперь соответствует чему угодно.
preg_match('/^[\s\S]$/s',"hello\nworld"); // returns 1
Альтернативой для того, чтобы .
соответствовал чему-либо (включая перевод строки), является использование модификатора s
.
preg_match('/^.*$/s',"hello\nworld"); // returns 1
Альтернативный способ использования модификатора s
заключается в следующем:
preg_match('/^(?s).*(?-s)$/',"hello\nworld"); // returns 1
(?s)
включает режим s
и (?-s)
выключается, если выключен. После отключения любой следующий .
не будет совпадать с новой строкой.