Форумы портала PHP.SU » PHP » Регулярные выражения » Вырезать из огромного текста кусочек, если он не содержит слово используя preg_match_all

Страниц (1): [1]
 

1. antobra - 10 Января, 2017 - 17:12:34 - перейти к сообщению
Здравствуйте,

Подскажите как вырезать из огромного текста кусочек текста, если он не содержит конкретного слова или слов?

Например текст:
Цитата:
... some text ...
Слово1 слово2 слово3 особоеСлово слово4 слово5 слово6 слово7
Слово1 слово2 слово3 слово4 слово5 слово6 слово7
... some text ...


И например регулярное выражение
PHP:
скопировать код в буфер обмена
  1. preg_match_all ( '#слово1(.+)слово7#isU', $text, $output );

вернет массив с двумя ключами первую строчку без особого слова и вторую.

А как вернуть только ту, где нет этого слова? Пробовал по-всякому
PHP:
скопировать код в буфер обмена
  1. preg_match_all ( '#слово1((?!особоеСлово).+)слово7#isU', $text, $output );

Не помогает.

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

Как это можно решить? Все инструкции в интернете дают (!?someword), но это не работает.

Спасибо
2. Мелкий - 10 Января, 2017 - 17:28:00 - перейти к сообщению
CODE (regex):
скопировать код в буфер обмена
  1. слово1(?:(?!особоеСлово).)+слово7

?
3. antobra - 10 Января, 2017 - 17:38:19 - перейти к сообщению
Мелкий пишет:
CODE (regex):
скопировать код в буфер обмена
  1. слово1(?:(?!особоеСлово).)+слово7

?


В таком случае возвращает массив с пустыми значениями

Upd:Моя ошибка. Не заменил слово. Спасибо от всей души Улыбка
4. Мелкий - 10 Января, 2017 - 17:45:53 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $text = '
  2. ... some text ...
  3. Слово1 слово2 слово3 особоеСлово слово4 слово5 слово6 слово7
  4. Слово1 слово2 слово3 слово4 слово5 слово6 слово7
  5. ... some text ...
  6. ';
  7. preg_match_all ( '#слово1(?:(?!особоеСлово).)+слово7#isUu', $text, $output );
  8. var_dump($output);

 

Powered by ExBB FM 1.0 RC1