Regexp начал использоваться как инструмент для соответствия обычным языкам.
Регулярные языки набирают довольно хороший баланс между эффективными алгоритмами распознавания и выразительностью. Легко думать, что обычные языки позволяют обнаруживать все интересные подстроки.
Однако существуют ограничения на регулярные языки. Особое значение для вашей проблемы имеет тот факт, что язык согласованных парантезов не является регулярным. - Это означает, что не существует регулярного выражения, которое соответствует языку согласованных парантезов.
Это будет конец обсуждения, за исключением следующего: с течением времени язык regexp расширился таким образом, который увеличивает его выразительную силу за пределами обычных языков. В частности, PHP предлагает рекурсивный регулярный оператор (?R)
, который позволит вам искать подходящие сопоставления или сопоставлять <div>
и </div>
теги.
Вы можете изучить синтаксис этого оператора и адаптировать его для своих нужд. - Вы, однако, будете тратить свое время. Parsing html - решаемая проблема, и использование парсера DOM будет более надежным, простым в расширении и более понятным для других кодеров или для себя, когда вы вернетесь в свой код позже.
Regex не является правильным решением для разбора HTML, я сомневаюсь, что это вообще возможно только с регулярным выражением. – musefan
Regex - неправильный инструмент для этого. Googeling «содержимое div php» быстро приводит к http://stackoverflow.com/questions/6491598/how-can-i-get-a-div-content-in-php. Я предлагаю вам попробовать методы, описанные там. – Taemyr
Помимо обычного «не разобрать html с регулярным выражением»: для вашего конкретного примера (и, скорее всего, только этого) просто удалите '?', Чтобы сделать квантификатор жадным. Кроме того, неудивительно, что '(? (? = Regex) then | else)' не будет работать, я сомневаюсь, что вы хотите совместить 'then' или' else' ;-) Не стесняйтесь показать нам, что вы действительно пытались использовать построить. –