Что означает [Ss]* в регулярном выражении в PHP?
Что подразумевается под [\s\S]* в регулярном выражении в PHP? Действительно ли [\S\s]*
соответствует каждой строке так же, как .*
?
3 answers
По умолчанию .
не соответствует новым строкам - [\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
Альтернатива, чтобы .
соответствовало чему угодно (включая новую строку) заключается в использовании модификатора s
.
preg_match('/^.*$/s',"hello\nworld"); // returns 1
Альтернативный способ использования модификатора s
заключается в следующем:
preg_match('/^(?s).*(?-s)$/',"hello\nworld"); // returns 1
(?s)
включает режим s
и (?-s)
выключается, если выключен. После выключения любые следующие .
не будут соответствовать новой строке.
[\s\S]
Набор символов, соответствующий любому символу, включая разрывы строк.
.
Соответствует любому символу, кроме разрывов строк.