За последние 24 часа нас посетили 21144 программиста и 1631 робот. Сейчас ищет 1441 программист ...

Как исключить не список символов, а строку

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

  1. windbridges

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

    С нами с:
    30 мар 2011
    Сообщения:
    1
    Симпатии:
    0
    Приветствую.
    Имеется скажем строка:
    Код (Text):
    1. <div>aaa 43 bbb</div><div>ccc 22 xxx</div>
    Мне нужен только второй Div, где есть xxx.
    пробуем так:
    Код (Text):
    1. <div>[^<]*?(\d+?) xxx</div>
    работает хорошо, но до тех пор, пока внутри Div не появятся вложенные теги, типа
    Код (Text):
    1. <div>ccc <b>22</b> xxx</div>
    следуя логике, нужно заменить символьный класс [^<]*? на отрицание строки </div>, т.е. чтобы пропускало все вложенные теги кроме <div>. вот как это сделать? как описать не список символов, а порядок?
    понятно, что теоретически туда может быть вложен и еще один <div>, тогда все пойдет наперекосяк, но этот вариант рассматривать не будем, т.к. случай тут не такой сложный, просто хочется немного универсальности.
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Такое выражение не пойдет?
    Код (Text):
    1. <div>[^<]*xxx<\/div>
    Есть программа хорошая, для теста регулярных выражений. "RegExpCheck" в поиске..
     
  3. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    YSandro, так ведь помрёт на первом же теге

    windbridges, посмотри вот это: негативный поиск назад. при правильном группировании получишь то, что ищешь. но у меня с конструкциями такого вида было не мало хлопот. если это не для дела - лучше туда не лезть