Question

I have a code like

 $newstr = preg_replace_callback("/<p>(.+?)</p>/", function($matches) 
 {
    return str_replace($matches[1], '<b>' . $matches[1] . '</b>', $matches[0]);
 }, $str);

It replaces if a single line string is given like this

 '<p>Hello World and Hello Universe</p>'

but fails when multiple lines are given like

  '<p>Hello World and
         Hello Universe</p>'

How it can be handled? If for test purpose I give string like this

  '<p>Hello World and'.
         'Hello Universe</p>'

It works but the problem is this string is coming from a textarea and cannot understand what to do?

Was it helpful?

Solution

Use the s modifier (also called DOTALL modifier). The dot metacharacter, by default, matches everything except newlines. The s modifier makes it match newlines as well:

$newstr = preg_replace_callback("~<p>(.+?)</p>~s", function($matches) {
    return str_replace($matches[1], '<b>' . $matches[1] . '</b>', $matches[0]);
}, $str);

Demo

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top