За последние 24 часа нас посетил 75381 программист и 3014 роботов. Сейчас ищут 1355 программистов ...

полная жадность

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

  1. radistao

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

    С нами с:
    22 янв 2009
    Сообщения:
    26
    Симпатии:
    0
    Нужно из строки
    HTML:
    1. <tag> any_text <tag>needed_text</tag> other_any_text</tag>
    захватить только "needed_text"
    Паттерн
    PHP:
    1. "{<tag>(.*)</tag>}U"
    захватит "any_text <tag>needed_text"
    не смотря на жадность.
    Я согласен, что без "U" оно захватило бы "any_text <tag>needed_text</tag> other_any_text", но и с "U" оно захватило лишний для меня открывающийся тег.
    я так подозреваю, что надо вставить что-то типа
    PHP:
    1. (^<tag>)
    но не знаю куда и как

    пример необходимости - выдрать из текста вложеный див или таблицу.
     
  2. Frozen

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

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
    <tag> any_text <tag>needed_text</tag> other_any_text</tag>
    "#<tag>.*<tag>(.+)</tag>#Uis"
     
  3. radistao

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

    С нами с:
    22 янв 2009
    Сообщения:
    26
    Симпатии:
    0
    а если таких вложений несколько(неопределенное количество)?
    тогда не подходит, т.к. данный вариант рассчитан на одно, а нужно извлеч "самое внутренее", т.е. то, которое не имеет вложенных <tag>
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
  5. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    в данном случае оно делает .* жадным, т.к. U уже указывает на не жадность.
     
  6. radistao

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

    С нами с:
    22 янв 2009
    Сообщения:
    26
    Симпатии:
    0
    специально для такого ответа я написал в теме:
    таким образом,
    PHP:
    1. "{<tag>(.*)</tag>}U"
    или равносильный ему
    PHP:
    1. "{<tag>(.*?)</tag>}"
    захватит строку
    HTML:
    1. <tag> any_text <tag>needed_text</tag>
    а мне надо
    HTML:
    1. <tag>needed_text</tag>
    Внимательно читаем тему и только потом отвечаем, блин
     
  7. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    а так если?
    Код (Text):
    1. /(?:<tag>.*)+<tag>(.*?)<\/tag>/