Что означает [\ S\s] * в регулярном выражении в PHP?

Что подразумевается под [\s\S]* в регулярном выражении в PHP? Действительно ли [\s\S]* соответствует каждой строке так же, как .*?

Ответ 1

По умолчанию . не соответствует новым строкам - [\s\S] - это взломать эту проблему.
Это часто встречается в JavaScript, но в PHP вы можете использовать флаг /s, чтобы совместить точки со всеми символами.

Ответ 2

Метасимвол . соответствует любому символу, кроме новой строки. Таким образом, шаблон .*, который используется для соответствия чему-либо, не будет работать, если вам нужно сопоставить новые строки как-хорошо.

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) поворачивается, если выключен. После выключения любой из следующих . не будет соответствовать новой строке.

Ответ 3

[\s\S] Набор символов, соответствующий любому символу, включая разрывы строк.

. Соответствует любому символу, кроме разрывов строк.