Трудности в правильной работе регулярного выражения

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

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

    krendelek007 Постоялец

    Регистр.:
    26 мар 2008
    Сообщения:
    50
    Симпатии:
    8
    Всегда были трудности с регулярными выражениями, поэтому прошу помощи.

    Имеется исходный текст:
    HTML:
    
    word1 word1 word1 word1
    word2 word2 word2 word2
    <h4 class="cam-title">text1</h4>
    word3 word3 word3 word3
    word4 word4 word4 word4
    <h4 class="cam-title">text2</h4>
    <h4 class="cam-title">text3</h4>
    word5 word5 word5 word5
    Для преобразования до нужного вида использую следующую регулярку:
    PHP:
    $txt ereg_replace("<h4 class=\"cam-title\">(.*)</h4>","",$txt);
    В результате применения регулярного выражения получаю (результат не удовлетворяет:(
    HTML:
    word1 word1 word1 word1
    word2 word2 word2 word2
    word5 word5 word5 word5
    А хотелось бы получить (результат удовлетворяет:(
    HTML:
    word1 word1 word1 word1
    word2 word2 word2 word2
    word3 word3 word3 word3
    word4 word4 word4 word4
    word5 word5 word5 word5
    Может кто-то подскажет, как подкорректировать выражение для правильной обработки?
    Заранее огромное спасибо.
     
  2. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    PHP:
    $txt preg_replace("/<h4 class=\"cam-title\">(.*?)<\/h4>/",""$txt); 
    PS: пустые строки тоже надо будет удалять
     
    krendelek007 нравится это.
  3. krendelek007

    krendelek007 Постоялец

    Регистр.:
    26 мар 2008
    Сообщения:
    50
    Симпатии:
    8
    Спасибо огромное! Работает.
    Только я так и не понял, в чем собственно была ошибка моей записи ..
     
  4. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    Забыл заэкранировать управляющий символ "/"
    для заэкранирования перед ним поставлен обратный слеш "\"
    Код:
    <\/h4>/
     
  5. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    o_nix, вообще-то проблема в жадном квантификаторе была :)
     
  6. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    Alix - в php regexp помещённый между /.../ переключается на "не жадный"
    то есть будет выдавать минимальное соответствие ??


    Блин честное слово я не заметил что в регексп "?" добавлен ... незаметный он какой то :D
     
  7. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    Минимальное соответствие будет мапиться если добавить ? к .* (т.к. * - жадный квантификатор по умолчанию). Или как вариант добавить спец параметро(насколько я помню - /U, но не пробовал)
     
Статус темы:
Закрыта.