отрицание RegExp

becool

Новичок
отрицание RegExp

В поиске нашёл три темы, не помогли.

Не получается выбрать из множества подобных лишь ту часть, которой не предшествуют определённые символы
Пример:

some text [false] some text [нужный текст 1] some text
some text some text [нужный текст 2] some text

Выражение должно вернуть:
[нужный текст 2].

Я додумался до примерно такого:
PHP:
 '/(?!\[false\])(.?)*нужный текст>/si';
Результат:
some text [false] some text [нужный текст 1] some text
some text some text [нужный текст 2]

P.s.
цифры в выражении "[нужный текст" проставлены наглядности ради, на самом деле там один и тот-же текст
 

Gorynych

Посетитель PHP-Клуба
попробуйте переформулировать вопрос - сейчас не совсем понятно, что на самом деле выбрать и из чего. Т.е что, собственно дано, и что надо получить.
 

becool

Новичок
эм.. ну ладно, тогда вот так.

любые символы[key=false][block='node'][/key]
[block='node']любые символы

надо взять второй [block='node'] и проигнорировать первый, потому как первый ложный (перед ним стоит [key=false]

Всё что в квадратных скобках нерушимо, однако между ними может быть что угодно.
Регулярка приведённая выше возвращает:
[key=false][block='node'][/key]
[block='node']
А надо
[block='node'] (второй!)
 

DiMA

php.spb.ru
Команда форума
твою писанину на русском языке я не понимаю и вникать не хочу...

Но ты можешь сделать 10-20 примеров поиска по тексту, методом аналогии я догадаюсь, че ты хотел. И не используй в примерах скобки или слова "любые символы".

Попробуй ^.*(?!.*XXX.*нужный текст)нужный текст.*$

(.?)*
этот бред, не ставь БЕЗДУМНО квантификаторы после скобки
(.)* - это ужас, новички часто так делают, но он хоть понятен, в таком случае правильно так: (.*)
че ты хотел сказать этим (.?)* - хз...
 

becool

Новичок
DiMA
если ты не понял и не вник то зачем отвечать? :)
твой пример делает тоже самое, через другие грабли.
 
Сверху