Вопрос по регулярке

Тема в разделе "Регулярные выражения", создана пользователем kkkoopp, 30 авг 2012.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. kkkoopp

    kkkoopp Постоялец

    Регистр.:
    18 май 2010
    Сообщения:
    121
    Симпатии:
    24
    Возник затык на ровном месте, не могу понять как указать в регулярном выражении "не последовательность", с "не символ" все понятно, можно указать так:

    [^<]+ - все, кроме символа <

    Но мне нужно до последовательности </a>
    Если указать [^</a>]+, то так не катит, оно в последовательности </a> каждый символ рассматривает отдельно.

    Каким образом можно указать регулярному выражению "все до последовательности </a>"?
     
  2. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    778
    Симпатии:
    233
    Код:
    .*(?=</a>)
     
  3. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    455
    zek24, абсолютно не согласен: во-первых использование lookarround не оправданно, а во-вторых, в контексте вопроса регулярка работает не так как нужно

    [​IMG]

    Заметьте, что в совпавшем тексте есть комбинации </a>. Правильная регулярка следующая:

    [\W\w]*?</a>

    В этом случае попадёт текст без </a>, так как регулярное выражение останавливается на первом появлении этой комбинации.
     
  4. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    778
    Симпатии:
    233
    xpert13, а может все же согласишься))
    Была задача Каким образом можно указать регулярному выражению "все до последовательности </a>"?
    На самом деле оба решения не идеальны
    Твое решение[\W\w]*?</a> захватывает и </a> находящиеся внутри и "крайний"
    [​IMG]
    Мое решение .*(?=</a>) не включает последний а, но жадное
    [​IMG]
    Делаем его ленивым .*?(?=</a>) и вуаля - берется "все до последовательности </a>"?
    [​IMG]
     
  5. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    455
    Давно и много работаю с регекспами и честно говоря всегда выхожу из ситуации "разделение нужного от ненужного" формированием групп: это проще для восприятия, да и регулярка короче.

    Но не суть, я понял почему мы не поняли друг друга сначала: тебе показалось, что автор спрашивал как не захватить конечный </a> в результат работы выражения, а мне - как дойти до первого совпадения такой комбинации. В любом случае ответ на этот вопрос есть в теме, автор пусть сам выбирает, что ему больше подходит.

    Остальным рекомендую показывать на примерах, что именно они хотят получить, чтобы нам было проще отвечать на такие вопросы и не раздувать простые темы до десятка сообщений.
     
    zek24 нравится это.
Статус темы:
Закрыта.