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