Я хотел бы сделать замену на строке, где у меня должно быть несколько условий и сделать замену на их основе. Я знаю, что я могу использовать массив в качестве строки поиска в 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;
}
но, очевидно, это не работает в этом случае.
Как я могу сделать эту работу?
Вы можете использовать это регулярное выражение для соответствия:
(?:<p>SOME\s)(TEXT\s?.*?)(?:<\/p>)
Единая группа захвата должна получить TEXT
и что-нибудь после нее до тех пор, пока </p>
Кроме того, если вы хотите разрешить динамическому контенту содержать новые строки, измените регулярное выражение на это:
(?:<p>SOME\s)(TEXT\s?[\s\S]*?)(?:<\/p>)
preg_replace()
. Теперь все в порядке.