Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Вырезать весь текст от класса до тега картинки


Автор: mstdmstd 30.11.2015, 11:14
Всем привет,
Нужно из строки вида        
Код

        $str= '<class="someclass">123<p>456<img';

        Вырезать весь текст от класса someclass до тега картинки
        Регулярка 
Код

       $ret = preg_match('~class="someclass">([^<]+)~', str, $matsches );

       режет текст до ближайшего тега параграфа
       А как правильно вырезать текст до картинки? 
          
          Спасибо!          
        

Автор: ksnk 1.12.2015, 11:16
Код

$ret = preg_match('~class="someclass">(.+?)<img~', str, $matsches );

Автор: mstdmstd 2.12.2015, 13:55
Спасибо, помогло!
А вот еще подскажите, для парсинга html-кода мне советовали пользовать DOMDocument и DOMXpath - кажется, они проще, но только в случае если работать с валидным
html-кодом. Если же html-код не валиден (незакрывающиеся теги ошибки синтасиса итд), то регулярка кажется хоть и более заковырестейб но более гибкойю 
Ка по вашему?

Автор: ksnk 2.12.2015, 17:03
Про парсинг невалидного html - наткнулся на http://habrahabr.ru/post/110112/. Сам, правда, не проверял, но на первый взгляд - компактно и достаточно удобно для не очень больших документов.

Работающие регулярки, очевидно, лучше, чем неработающие на невалидном HTML стандартные средства.

Добавлено через 2 минуты и 7 секунд
https://github.com/olamedia/nokogiri 

Автор: mstdmstd 3.12.2015, 16:30
Еще раз спасибо!
И разжуйте пожалуйста что означает комбинауция .+?  перед "<img" ?
Что то типа "Любой текст(включая спецсимволы) пока не встретиться тег картинки" ?

Автор: ksnk 3.12.2015, 18:30
.+ - не менее одного любого символа. Здесь, возможно, стоит поставить * вместо +, если до тега img может ничего и не быть.
?- Режим - ungreedy - это значит, что будет захвачена последовательность минимально возможной длины.
Лучше почитать про регулярки и модификаторы в документации, инструмент удобный, но со своей собственной логикой и не без ограничений и причуд.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)