PHP preg_replace 不匹配多行

red*_*ent 0 php regex preg-replace

帮助!我正在做一个替换,将括号内的块转换为 s 包围的块<div>。请看下文。

代码:

$data = '
<p>
{ 
asdf
asdf
asdf
}
</p>
';

echo preg_replace('%{(.*)}%m', '<div>\1</div>', $data);
Run Code Online (Sandbox Code Playgroud)

输出应该是:

<p>
<div>
asdf
asdf
asdf
</div>
</p>
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

Nie*_*sol 5

使用s修饰符而不是m修饰符。

s修饰符允许.匹配换行符。

修饰符m使^$匹配各行的开头和结尾,而不是整个字符串的开头和结尾。

旁注:替换的首选语法是<div>$1</div>