2014-11-26 3 views
0

Я пытаюсь заменить все \ n в строке json на двойной канал ||. Вот пример строки:Регулярное выражение с PHP для замены строк новой строки

{"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)?

Спасибо.

+0

, если вы хотите заменить '\ n' символов, то почему вы используете' preg_match'? –

+0

На самом деле я не хочу заменять все новые строки, но только новые строки в комментарии. Если у вас есть || сразу после {, функция php json_decode столкнется с проблемой. – Mahcih

+2

@Hicham: cf мой ответ: декодируйте строку, измените значение 'comment' и снова закодируйте данные. Это самый простой способ и самый безопасный способ: –

ответ

1

Используйте функцию preg_replace, как показано ниже. Я предположил, что ваш вклад имеет сбалансированную параллельность.

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

DEMO

+0

Что представляет [^ {}]? Каждый символ, который не является {или}? – Mahcih

+0

yep, соответствуют всем символам, кроме '{' или '}' –

+0

И если я хочу заменить его только в содержании комментария «comment»: «ЗДЕСЬ», я пробовал \ n (? = "Comment": ". * ") – Mahcih

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

Вы можете просто использовать это. Заполните ||.

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

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

На самом деле я не хочу заменять все новые строки, но только новые строки в комментарии. Если у вас есть || сразу после {, функция php json_decode столкнется с проблемой. – Mahcih

+0

@Hicham попробуйте сейчас – vks

+0

@Hicham Новая строка не разрешена в значении json, все они должны быть заменены на '\ n'. Затем вы можете использовать json_decode(), как сказано в недостающем ответе. – Henrik

Смежные вопросы