PHP строку заменить несколькими условиями

1

Я хотел бы сделать замену на строке, где у меня должно быть несколько условий и сделать замену на их основе. Я знаю, что я могу использовать массив в качестве строки поиска в str_replace(), но моя проблема в том, что часть строки является динамической.

Например:

строка будет выглядеть так:

<p>SOME TEXT</p> 
<p>SOME TEXT (dynamic content 1)</p> 
<p>SOME TEXT (dynamic content 2)</p> 
<p>SOME TEXT</p>

и заменяемая строка должна выглядеть так:

<p>SOME <span>TEXT</span></p> 
<p>SOME <span>TEXT (dynamic content 1)</span></p> 
<p>SOME <span>TEXT (dynamic content 2)</span></p> 
<p>SOME <span>TEXT</span></p>

В качестве примера показаны слова поиска: TEXT и TEXT (dyn cont) моя проблема в том, что я не могу понять, как установить условие для второго слова поиска, где контент является динамическим между скобками.

В основном, если бы было 2 постоянных слова, чем я сделал бы что-то вроде этого:

if(strpos($str, 'TEXT') !== FALSE || strpos($str, 'TEXT ()') !== FALSE){
  echo str_replace(array('TEXT', 'TEXT ()'), 
                   array('<span>TEXT</span>', '<span>TEXT ()</span>'),
                   $str);
}
else {
  echo $str;
}

но, очевидно, это не работает в этом случае.

Как я могу сделать эту работу?

  • 2
    регулярные выражения сделают свое дело. str_replace не может совпадать с подстановочными знаками, поэтому, если вы сначала не выполните кучу поиска / поиска, вы не сможете использовать str_replace для этого.
Теги:
string
str-replace

1 ответ

2
Лучший ответ

Вы можете использовать это регулярное выражение для соответствия:

(?:<p>SOME\s)(TEXT\s?.*?)(?:<\/p>)

Единая группа захвата должна получить TEXT и что-нибудь после нее до тех пор, пока </p>

Кроме того, если вы хотите разрешить динамическому контенту содержать новые строки, измените регулярное выражение на это:

(?:<p>SOME\s)(TEXT\s?[\s\S]*?)(?:<\/p>)

Regex101

  • 0
    Спасибо! Я немного изменил ваше выражение, а затем сделал preg_replace() . Теперь все в порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню