regexp: отсутствие подстроки в тексте

carlos_php

Новичок
regexp: отсутствие подстроки в тексте

Суть следующая, есть строка вида:
{text}pre {text}inner{/text}after{/text} aswdasdasdd

необходимо извлечь тег с содержимым {text}inner{/text} с таким условием,
что внутри него нет строк вида {text}, {/text}.

Нигде не могу найти информацию о том как искать по отсутствию подстроки.

Есть вариант искать так:
PHP:
function preParse($t){
	preg_match("/{text}(.*{\/text})/isU", $t, $match);
	if(preg_match("/{text}.*{\/text}/isU", $match[1], $match2))
			$match[0] = preParse($match2[0]);
	return $match[0];
}
Но должен же быть способ проще.
 

DiMA

php.spb.ru
Команда форума
сначала регом меняешь двойные блоки {text}pre {text}inner{/text}after{/text} на что-то иное, типа {text2}pre {text2}inner{/text2}after{/text2}, или вообще удаляешь

затем регом ищешь нужный текст
 

carlos_php

Новичок
Не совсем понимаю, зачем менять теги в двойных блоках, и что после этого изменяется в решении задачи?
 

DiMA

php.spb.ru
Команда форума
вопрос нормально задай, чтобы кто-то кроме тебя ОДНОЗНАЧНО понял набор слов

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

если я правильно понял: первым регом найти и удалить двойные блоки, вторым - что останется
 

carlos_php

Новичок
Перефразирую вопрос:
есть строки
1. один два три
2. один три
3. один четыре пять
4. два пять шесть

надо написать регексп, который возвращает строку, где нет слова "два" в одно выражение.

Изначально стояла задача: заменить теги вида {text id123}вложенный текст{/text} на <span id="ud123">вложенный текст</span> в случае, когда есть вложенность тегов вида {text id123}вложенный текст{text id345}еще один вложенный текст{/text} после{/text}.
На выходе должна быть строка: <span id="id123">вложенный текст<span id="id345">еще один вложенный текст</span> после</span>.
 

DiMA

php.spb.ru
Команда форума
1.

> Перефразирую вопрос:

ответом является - str_replace("два", "", $text)

понятно, это не то что ты хотел, но сей ответ точно по условию
задумайся, насколько ты неадекватно задаешь вопросы

2.

{text id123}вложенный текст{/text}
{text id123}вложенный текст{text id345}еще один вложенный текст{/text} после{/text}

Для этого 2мя регами тупо меняешь отдельно {text id123} и отдельно {/text}, забыв о вложенности.
 
Сверху