Denjs
Новичок
regexp: замена подстроки которая не между тегами
Задача примерно такая :
есть "псевдотег1". вида
Есть "псевдотег2" "парный" вида
Задача заменить все {--tag--} на заданную строку, если {--tag--} находится НЕ внутри
при этом внутри block может находиться и другой текст.
типа
где text1-text4 некий произвольный текст ранее неизвестный.
на
Единственный относительно рабочий вариант который у меня получился - но он не понимает никаких text1-4:
в ответ получаю
при попытке вписать ".*?" в Look behind конструкцию
Получаю ошибку...
при повытке вставить (.*?) после Look behind конструкции
Получаю вобще замену всего и включая text1-4.
вопроса : как описать задачу? (замена псевдотега {--tag--} вне пределов конструкции block)
т.е. правильный результат в примере - это замена только первого {--tag--} так как только он находится вне конструкции block.
Заранее спасибо.
Задача примерно такая :
есть "псевдотег1". вида
PHP:
{--tag--}
PHP:
<block> ... </block>
PHP:
<block> ... </block>
типа
PHP:
text1 {--tag--} text2 <block> text3 {--tag--} text4 </block> <block>{--tag--}</block> <block> text5 {--tag--}</block>
на
PHP:
text1 STRING text2 <block> text3 {--tag--} text4 </block><block> text5 {--tag--}</block>
PHP:
$str="text1 {--tag--} text2 <block> text3 {--tag--} text4 </block> <block>{--tag--}</block> <block> text5 {--tag--}</block>";
$req="/(?<!(\<block\>))\{--tag--\}(?!(\<\/block\>))/";//ok
$content=preg_replace($req,"3STRING",$str);
PHP:
text1 STRING text2 <block> text3 STRING text4 </block> <block>{--tag--}</block> <block> text5 {--tag--}</block>
PHP:
(?<!(\<block\>.*?)
при повытке вставить (.*?) после Look behind конструкции
PHP:
(?<!(\<block\>)(.*?)\{--tag--\}(.*?)(?!(\<\/block\>))
вопроса : как описать задачу? (замена псевдотега {--tag--} вне пределов конструкции block)
т.е. правильный результат в примере - это замена только первого {--tag--} так как только он находится вне конструкции block.
Заранее спасибо.