Как заменить несколько строк в одной строке или не в одной строке с PHP?

Нужно регулярное выражение, чтобы заменить все внутренние скобки на myReplace! Важно, чтобы пробелы и строки оставались как есть!

$fileContent = <div class="panel-body">
{toChangeOne}{toChangeTwo}
{
toChangeTree
}
</div>

$change = preg_replace('NEEDED_REGEX', 'myReplace', $fileContent);

0

Решение

Итак, в основном, все, что вам нужно сделать, это найти набор фигурных скобок и заменить их, а также все, что внутри.

Нечто подобное должно работать для вас:

<?php

$fileContent = '<div class="panel-body">
{toChangeOne}{toChangeTwo}
{
toChangeTree
}
</div>';

$fileContent = preg_replace('~\{.*?\}~sm', 'myReplace', $fileContent);

print $fileContent;

Вот что означает это выражение \{.*?\}:

  • \{ — ищу открывающую фигурную скобку {, Мы должны избежать этого с обратной косой чертой \ поскольку фигурные скобки имеют особое значение в регулярных выражениях.
  • .*? — Подходим любой персонаж .любое количество раз * пока мы не дойдем до следующей части нашего заявления ?,
  • \} — Следующая часть нашего заявления — заключительная фигурная скобка }, Опять же, нам нужно избежать обратной косой черты \,

Вот рабочая демонстрация:

http://ideone.com/Pi8OvI

2

Другие решения

Вы также можете подойти к вашей проблеме, используя массив ключей для изменения, как показано ниже. Это может быть полезно при попытке заменить несколько строк.

<?php

// array with keys that you'll be changing in your text
$toChange = array(
"{toChangeOne}" => "First Change",
"{toChangeTwo}" => "Second Change",
"{toChangeThree}" => "Third Change");$fileContent = '<div class="panel-body">
{toChangeOne}{toChangeTwo}
{
toChangeThree
}
</div>';

// loop through all the keys you want to change
foreach($toChange as $key => $value){

// prep regex
// remove the openning and curly braces this
// way we can match anything that matches our
// keys even if there's a mixture of returns
// or empty spaces within the curly braces
$key_text = str_replace("{", "", $key);
$key_text = str_replace("}", "", $key_text);

// "\{"             - matches the character "{" literally
// "(\s|\s+)?"      - matches any white space. In our case
//                    we might want it to be optional hense
//                    the "?"// "\}"             - matches the character "}" literally
$regex = '/\{(\s|\s+)?'.$key_text.'(\s|\s+)?\}/';

$fileContent = preg_replace($regex, $value, $fileContent);
}

echo $fileContent;
1

По вопросам рекламы [email protected]