phpregexmodifiermetacharacters

How to make a . (any character) in a PHP regex pattern also match newline characters?


The . character in a PHP regex accepts all characters except a newline. What can I use to accept ALL characters, including newlines?

For example:

$text = <<<TEXT
foo
bar
TEXT;
preg_match('/.+/', $text, $match);
echo $match[0];

This returns foo, but I need the full string match to be returned as:

foo
bar

Solution

  • This is commonly used to capture all characters:

    [\s\S]
    

    You could use any other combination of "Type-X + Non-Type-X" in the same way:

    [\d\D]
    [\w\W]
    

    but [\s\S] is recognized by convention as a shorthand for "really anything".

    You can also use the . if you switch the regex into "dotall" (a.k.a. "single-line") mode via the "s" modifier. Sometimes that's not a viable solution (dynamic regex in a black box, for example, or if you don't want to modify the entire regex). In such cases the other alternatives do the same, no matter how the regex is configured.