Регулярка для удаления комментариев

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

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

    pierrevk Постоялец

    Регистр.:
    22 сен 2009
    Сообщения:
    59
    Симпатии:
    5
    Приветствую могущественный All!
    В коде куча бестолковых комментариев. Пример кода:
    HTML:
    </td>
    ...
    </tr>
    <!--    <tr>       <td><div align="left">&nbsp;</div></td>          -->
    <tr valign="top">
      <td>
        <br>
        <!--         <td><div align="left"></div></td>    -->
        <tr valign="top"> 
    ...
    
    Мне требуется регулярка, которая захватит каждый комментарий по отдельности, а не все то, что находится между первым <!-- и последним --> ??
    Буду очень признателен идеям, сталкиваюсь с такой задачей постоянно, а как решить не знаю.
     
  2. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    Вот
    PHP:
    /(<!--.*-->)/isxmU
     
    pierrevk нравится это.
  3. pierrevk

    pierrevk Постоялец

    Регистр.:
    22 сен 2009
    Сообщения:
    59
    Симпатии:
    5
    Попробовал, работает!
    EnGeLs, спасибо тебе огромное!

    Какая приятная вещь, этот непонятный мне пока набор isxmU, который творит чудеса!
     
  4. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    Вот тут подробное описание этого "набора" - называется он модификаторы:
    http://www.pcre.ru/docs/php/text/stdmod/
     
  5. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Ну, ixm здесь вообще ничего не значат. U довольно бестолковый модификатор, который меняет смысл регулярки /(<!--.*-->)/ на /(<!--.*?-->)/.
    А s означает совпадение точки с любым символом. Без него она не совпадает с переводом строки, и комментарий может находится только на одной строке.
     
  6. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    Ну да, i,x,m можно убрать в принципе... Для примера сойдет. Разница будет только в скорости.
     
  7. pierrevk

    pierrevk Постоялец

    Регистр.:
    22 сен 2009
    Сообщения:
    59
    Симпатии:
    5
    Попытался прочесть подробное описание набора модификаторов, пройдя по ссылки. Скажу я вам, друзья, не комильфо. Сухой текст без примеров. Без поллитры не разберешь.

    Как итог - так и не понял, какой именно из модификаторов убирает это свойство "глобальности", когда с кучей бесполезных комментариев сжирается куча полезного кода!

    Тем не менее, проблему вы мне решить помогли, уже всё в лучшем виде, на будущее если isxmU не нужны в полном объеме - та какой из них пользовать я разберусь на практике.

    Вот такой вопрос - порядок модификаторов важен?
     
  8. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    Нет, порядок не важен.
     
  9. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    ты знаешь что такое "жадность квантификаторов"? если да - подумай что она сделает в данном коде! если не додумаешься то смотри:
    Код:
    <!-- first comment -->
    какой-то контент
    <!-- second comment -->
    еще контент
    <!-- последний контент -->
    
    если вырезать
    Код:
    <!--(.*)-->
    
    то от кода ничего по идее не останется, в то время как
    Код:
    <!--(.*?)-->
    
    угасит аппетит * и комменты удалятся корректно
     
  10. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Я-то знаю. И по-моему, все достаточно подробно расписал топик стартеру.
    Зачем же ты написал свое сообщение, вообще не понял.
     
Статус темы:
Закрыта.