PHP preg_replace不匹配多行


PHP preg_replace not matching multiple lines

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

代码:

$data = '
<p>
{ 
asdf
asdf
asdf
}
</p>
';
echo preg_replace('%{(.*)}%m', '<div>'1</div>', $data);

输出应为:

<p>
<div>
asdf
asdf
asdf
</div>
</p>

我在这里做错了什么?

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

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

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

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

使用 s 修饰符。

preg_replace('%{(.*)}%s', '<div>'1</div>', $data);

使用 s 而不是 m ;

echo preg_replace('~'{(.*)'}~s', '<div>'1</div>', $data);

只是一个建议,转义所有对正则表达式特别的字符。