За последние 24 часа нас посетили 20020 программистов и 1695 роботов. Сейчас ищут 1676 программистов ...

Отрицание слова

Тема в разделе "Регулярные выражения", создана пользователем Argentum, 6 май 2009.

  1. Argentum

    Argentum Активный пользователь

    С нами с:
    31 окт 2007
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Москва
    Всем привет!

    Представим себе, что есть вот такой текст:

    Код (Text):
    1. zero <b>one</b> two <i>three</i> <b>four</b> five
    Ставится задача вытащить всё, что находится внутри тэгов <b>..</b>.

    Пробуем применить функцию preg_match со следующим шаблоном поиска:

    Код (Text):
    1. /<b>(.+)+<\/b>/
    Вместо того, чтобы выделить два вхождения текста в <b>..</b>. функция констатирует единственное вхождение - от первого <b> до второго </b>, т.е.

    Код (Text):
    1. one</b> two <i>three</i> <b>four
    Напрашивается вывод: вместо (.+) в шаблоне надо использовать некое выражение, которое говорит примерно следующее: "должны попадаться любые символы, но только не такая последовательность как </b>".
    Я знаю, как вводить отрицание отдельного символа или класса символов. Но я никак не могу въехать, как сделать отрицание последовательности символов :(
    Ткните пальцем, пожалуйста... А то уже замучался.
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Во-первых, нужно обязательно использовать жадную выборку, иначе он не будет соблюдать правильно порядок тегов.
    Во-вторых, я никак не могу понять, нафиг после скобки стоит знак "плюс"?
    Это элементарная задача:

    Код (Text):
    1. preg_match_all('#<b>(.+?)</b>#i', $string);
     
  3. Argentum

    Argentum Активный пользователь

    С нами с:
    31 окт 2007
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Москва
    Хм... Действительно, работает. Только если б я ещё чего понял из этого :(
    Есть ли подробный русскоязычный материал на тему юзанья регулярных выражений в PHP? Или это непозволительная роскошь?
     
  4. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы