PHP preg_replace不匹配多行

时间:2013-02-01 01:47:42

标签: php regex preg-replace

帮助!我正在进行替换,将括号内的块转换为<div> s包围的块。请参阅下文。

代码:

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

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

输出应为:

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

我在这里做错了什么?

3 个答案:

答案 0 :(得分:4)

使用s修饰符代替m修饰符。

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

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

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

答案 1 :(得分:2)

使用s修饰符。

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

答案 2 :(得分:1)

使用s代替m;

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

只是一个建议,逃避所有对正则表达式特殊的字符。