What is meant by
[\s\S]* in regex in PHP? Does
[\s\S]* actually match every string the same as
. doesn’t match new lines –
[\s\S] is a hack around that problem.
/s flag to to make the dot match all characters.
. meta character matches any character except a newline. So the pattern
.* which is used to match anything will not work if you have to match newlines as-well.
preg_match('/^.*$/',"hello\nworld"); // returns 0
[\s\S] which is a character class of white-space characters and non-whitespace characters matches any character including a newline so do
[\w\W]. So your pattern
[\s\S]* now matches anything.
preg_match('/^[\s\S]$/s',"hello\nworld"); // returns 1
An alternative to make
. match anything (including a newline) is to use a
preg_match('/^.*$/s',"hello\nworld"); // returns 1
Alternative way of using the
s modifier is in-lining it as:
preg_match('/^(?s).*(?-s)$/',"hello\nworld"); // returns 1
(?s) turns on the
s mode and
(?-s) turns if off. Once turned off any following
. will not match a newline.
[\s\S] A character set that matches any character including line breaks.
. Matches any character except line breaks.