使用PHP正则表达式替换换行符

时间:2014-11-26 11:40:54

标签: php regex

我试图用双管||替换json字符串中的所有\ n。以下是字符串的示例:

{"comment":"test1
test2
test3"}';

这是我所做的正则表达式:

preg_match('/"comment":"(([^\n\t\r"]*)([\n\t\r]*))+"/', $a, $t);

这个preg_match的结果是

Array
(
    [0] => "comment":"test1
test2
test3"
    [1] => 
    [2] => 
    [3] => 
)

我找不到我的正则表达式有什么问题。

我是否需要递归模式(?R)?

感谢。

2 个答案:

答案 0 :(得分:1)

使用下面的preg_replace函数。我认为你的输入有平衡的paranthesis。

preg_replace('~(?:"comment"[^\n]*|\G)\K\n([^{}\n]*)~', '||\1', $str)

DEMO

答案 1 :(得分:0)

\n+(?=[^{]*})

您只需使用此{。替换为||

$re = "/\\n+(?=[^{]*})/i";
$str = "{\"comment\":\"test1\n test2\n test3\"}'";
$subst = "||";

$result = preg_replace($re, $subst, $str);