2015-09-30 3 views
1

Я пытаюсь заменить «XYZ» на новую строку «\ n», используя регулярное выражение. но я не преуспел. Пожалуйста, проверьте приведенный ниже код и помогите мне.reg выражение - заменить текст новой строкой для всех записей - php

$epText = "this is for text |XYZ and |XYZ and XYZ"; 
$find = '|XYZ'; 
$replace = '\n'; 
$epFormatedText = preg_replace_callback(
    '/{{.+?}}/', 
    function($match) use ($find, $replace) { 
     return str_replace($find, $replace, $match[0]); 
    }, 
    $epText 
); 
echo $epFormatedText; 

Но это оригинальный текст. никакое действие не выполняется. Пожалуйста, помогите по этому поводу.

+0

'preg_replace ('~ \ bXYZ \ Ь ~', '\ п', $ Stre)' –

+0

Ваш '{{. +?}}' Регулярное выражение соответствует 2 '{' s то, по крайней мере, 1 символ, который не является символом новой строки, а затем 2 '}' s. Ваш вход не подходит. –

ответ

0

Нет необходимости в такой сложной функции, когда preg_replace должен делать то, что вам нужно.

$epText = "this is for text XYZ and XYZ and XYZ"; 
$replaced = preg_replace('@[email protected]',"\n",$epText); 

echo '<textarea>', $replaced ,'</textarea>'; 
1

Причина заключается в том, что вы используете одиночные кавычки вокруг \n в $replace. Таким образом, \n рассматривается как литерал \ + n символов.

Что касается regex, я предлагаю использовать (?<!\w) и (?!\w) look-arounds, так как вы ищете совпадающие целые слова, а не части других более длинных слов (судя по вашему примеру).

Поскольку ввод ($find) может содержать специальные метасимволы регулярного выражения, вам необходимо использовать preg_quote, чтобы избежать этих символов.

Вот ваш фиксированный код:

$epText = "this is for text |XYZ and |XYZ and XYZ"; 
$find = '|XYZ'; 
$replace = "\n"; 
$epFormatedText = preg_replace(
    "/(?<!\\w)" . preg_quote($find) . "(?!\\w)/", 
    $replace, 
    $epText 
); 
echo $epFormatedText; 

См IDEONE demo

+0

Обратите внимание на использование 'preg_replace' здесь, это проще, чем' preg_replace_callback', и здесь более уместно. Кроме того, при объявлении регулярного выражения с двойными кавычками метасимволы регулярных выражений (например, '\ b') должны быть дважды экранированы. –

+0

stribizhev, Спасибо за быстрый ответ. Я изменил свой вопрос (добавлен символ PIP (|)). Для этого он не работает. Для моего предыдущего, ваш ответ работает отлично. – Keerthi

+0

См. Мое обновление. Тем не менее, решение 'preg_replace' является наиболее жизнеспособным, я думаю. –

0

Попробуйте

echo preg_replace('/XYZ/', '<br>', $epText); 
1

Вы делаете это в неправильном направлении вам нужно только preg_replace над просто вроде как

$epText = "this is for text |XYZ and |XYZ and XYZ"; 
$find = '|XYZ'; 
$replace = '\n'; 

echo preg_replace("/\B" . preg_quote($find) . "\b/","\n",$epText); 

Примечание: обратите внимание на использование котировок здесь.

Demo

+0

Его работа отлично подходит для моего примера. Но еще одна проблема заключается в том, что я пытаюсь заменить «| XYZ», но он не работает должным образом. не могли бы вы посоветовать мне, как я могу работать с символом PIPE – Keerthi

+0

Можете ли вы разместить строку ввода вместе с ожидаемым выходом –

+0

$ epText = «это для текста | XYZ и | XYZ и XYZ»; – Keerthi

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