Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сказать на регуляре "найди текст без..."?
 
 автор: uriy   (02.12.2011 в 14:39)   письмо автору
 
 

Добрый день!
Не подскажите, как сказать на языке регулярных выражений "Найди все подстроки в тексте между двумя ближайшими тегами <strong>, но так, чтобы в них не было '</strong>' ". Это пример. На самом деле вместо '<strong>' и '</strong>', могут быть две произвольные строки.

  Ответить  
 
 автор: cheops   (02.12.2011 в 14:43)   письмо автору
 
   для: uriy   (02.12.2011 в 14:39)
 

Регулярные выражения - декларативный язык, в нем нельзя задать алгоритм поиска, в нем можно задать только то, как будет выглядеть результат, наиболее близкий пример, к тому, что вы описываете - это
<strong>.*?</strong>
однако, возможно, это не то, что вам требуется.

  Ответить  
 
 автор: uriy   (02.12.2011 в 14:47)   письмо автору
 
   для: cheops   (02.12.2011 в 14:43)
 

Да-да, совершенно верно. Сейчас Вы сказали "найди строку между ближайшими '<strong>'". Ещё бы добавить к этому "и чтобы в этой строке не было '</strong>'".

  Ответить  
 
 автор: cheops   (02.12.2011 в 14:52)   письмо автору
 
   для: uriy   (02.12.2011 в 14:47)
 

А его и не будет, так как используется "не жадный" вариант регулярного выражения .*?

  Ответить  
 
 автор: uriy   (02.12.2011 в 14:55)   письмо автору
 
   для: cheops   (02.12.2011 в 14:52)
 

нет, чуток не так. Нужно найти текст между двумя ближайшими '<strong>' и чтобы '</strong>' не было внутри, а у Вас поиск для пары '<strong>' и '</strong>'.

  Ответить  
 
 автор: cheops   (02.12.2011 в 14:59)   письмо автору
 
   для: uriy   (02.12.2011 в 14:55)
 

А, понятно. Если честно, я бы просто извлек данные между всеми <strong> и проверил бы в результатах при помощи внешнего языка (того же PHP) есть там </strong> или нет. Это надежнее и регулярное выражение будет простым (проще потом редактировать).

  Ответить  
 
 автор: duhon   (02.12.2011 в 17:44)   письмо автору
 
   для: uriy   (02.12.2011 в 14:39)
 

может так тебе поможет
preg_match_all('/(?<=<strong>)(?:.(?!</strong>))*?(?=<strong>)/', 'дядя Вася <strong>пошёл за <strong>молоком, а <strong>молоко</strong> убежало</strong></strong>', $matches)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования