What does [\S\s]* mean in regex in PHP?

前端 未结 3 1740
梦如初夏
梦如初夏 2020-12-03 06:24

What is meant by [\\s\\S]* in regex in PHP? Does [\\s\\S]* actually match every string the same as .*?

相关标签:
3条回答
  • 2020-12-03 07:20

    [\s\S] A character set that matches any character including line breaks.

    . Matches any character except line breaks.

    0 讨论(0)
  • 2020-12-03 07:24

    By default . doesn't match new lines - [\s\S] is a hack around that problem.
    This is common in JavaScript, but in PHP you can use the /s flag to to make the dot match all characters.

    0 讨论(0)
  • 2020-12-03 07:26

    The . 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 [\d\D], [\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 s modifier.

    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.

    0 讨论(0)
提交回复
热议问题