Всем привет! Представим себе, что есть вот такой текст: Код (Text): zero <b>one</b> two <i>three</i> <b>four</b> five Ставится задача вытащить всё, что находится внутри тэгов <b>..</b>. Пробуем применить функцию preg_match со следующим шаблоном поиска: Код (Text): /<b>(.+)+<\/b>/ Вместо того, чтобы выделить два вхождения текста в <b>..</b>. функция констатирует единственное вхождение - от первого <b> до второго </b>, т.е. Код (Text): one</b> two <i>three</i> <b>four Напрашивается вывод: вместо (.+) в шаблоне надо использовать некое выражение, которое говорит примерно следующее: "должны попадаться любые символы, но только не такая последовательность как </b>". Я знаю, как вводить отрицание отдельного символа или класса символов. Но я никак не могу въехать, как сделать отрицание последовательности символов Ткните пальцем, пожалуйста... А то уже замучался.
Во-первых, нужно обязательно использовать жадную выборку, иначе он не будет соблюдать правильно порядок тегов. Во-вторых, я никак не могу понять, нафиг после скобки стоит знак "плюс"? Это элементарная задача: Код (Text): preg_match_all('#<b>(.+?)</b>#i', $string);
Хм... Действительно, работает. Только если б я ещё чего понял из этого Есть ли подробный русскоязычный материал на тему юзанья регулярных выражений в PHP? Или это непозволительная роскошь?
http://www.phpfaq.ru/regexp Там есть ссылки на материалы. А вообще, Google rules... http://www.google.ru/search?hl=ru&q=php+регулярные+выражения&btnG=Поиск+в+Google&lr=&aq=1&oq=php+ре