|
|
|
| Добрый день!
Не подскажите, как сказать на языке регулярных выражений "Найди все подстроки в тексте между двумя ближайшими тегами <strong>, но так, чтобы в них не было '</strong>' ". Это пример. На самом деле вместо '<strong>' и '</strong>', могут быть две произвольные строки. | |
|
|
|
|
|
|
|
для: uriy
(02.12.2011 в 14:39)
| | Регулярные выражения - декларативный язык, в нем нельзя задать алгоритм поиска, в нем можно задать только то, как будет выглядеть результат, наиболее близкий пример, к тому, что вы описываете - это
однако, возможно, это не то, что вам требуется. | |
|
|
|
|
|
|
|
для: cheops
(02.12.2011 в 14:43)
| | Да-да, совершенно верно. Сейчас Вы сказали "найди строку между ближайшими '<strong>'". Ещё бы добавить к этому "и чтобы в этой строке не было '</strong>'". | |
|
|
|
|
|
|
|
для: uriy
(02.12.2011 в 14:47)
| | А его и не будет, так как используется "не жадный" вариант регулярного выражения .*? | |
|
|
|
|
|
|
|
для: cheops
(02.12.2011 в 14:52)
| | нет, чуток не так. Нужно найти текст между двумя ближайшими '<strong>' и чтобы '</strong>' не было внутри, а у Вас поиск для пары '<strong>' и '</strong>'. | |
|
|
|
|
|
|
|
для: uriy
(02.12.2011 в 14:55)
| | А, понятно. Если честно, я бы просто извлек данные между всеми <strong> и проверил бы в результатах при помощи внешнего языка (того же PHP) есть там </strong> или нет. Это надежнее и регулярное выражение будет простым (проще потом редактировать). | |
|
|
|
|
|
|
|
для: uriy
(02.12.2011 в 14:39)
| | может так тебе поможет
preg_match_all('/(?<=<strong>)(?:.(?!</strong>))*?(?=<strong>)/', 'дядя Вася <strong>пошёл за <strong>молоком, а <strong>молоко</strong> убежало</strong></strong>', $matches)
|
| |
|
|
|