Romul81
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору P.S. Заметил на вашем скрине одну специфическую ситуацию. Вы используете конструкцию ((?!<div ).)* Вот именно так никогда не делайте. Да, есть похожая конструкция, которая иногда используется (по крайней мере я использую часто) - (?:(?!<div ).)* Но даже она здесь не нужна. Ведь что получается? В вашем случае каждый символ, захваченный конструкцией образует группу, которую движку надо запомнить. Кроме того, в сочетании с жадным квантификатором это означает, что у вас будет столько групп, сколько символов от начала захвата и до конца строки. Далее. Чтоб найти совпадение с rid=" движок после захвата всей строки будет откатываться до тех пор, пока этот самый rid (не) найдёт. Это очень неэффективная регулярка. Если поступить по простому (и при уверенности, что в значениях атрибутов тега не может быть <>), то гораздо лучше сделать так: Код: <div\s+id="post-(\d+)[^>]*?[\s'"]rid=" | При этом решаем проблему переносов строк, которые могут быть между тегом и его атрибутами. Паттерн [\s'"] нужен для ситуаций, когда значение предыдущего атрибута "приклеивается" к имени следующего. Да, это не валидный код, но такое бывает. Можно использовать, также жадный квантификатор вместо нежадного - зависит от того, насколько много атрибутов в теге (на скрине не видно). Но это не принципиально. В любом случае регулярка будет гораздо легче для движка. Если предусмотреть наличие <>, то выражение надо усложнить. Но опять же, не сильно в ущерб эффективности. Пользуйтесь родственной программой RegexBuddy, для того, чтобы понимать, как работает каждая конкретная регулярка (функция дебаггинга). |