2015-01-30 3 views
1

Я должен получить все содержимое DIV класса в PHP, и у меня есть это:Regex для получения все внутри DIV включая дивы

<div class="main">(.*?)</div> 

Но у меня есть проблемы с Div детей.

<div class="main">asdasd<div>jkjk</div></div> 

В результате этого является:

<div class="main">asdasd<div>jkjk</div> 

Я пытаюсь с | но я не могу заставить его работать ¯ \ _ (ツ) ((= регулярное выражение), то еще?) _/¯

+0

Regex не является правильным решением для разбора HTML, я сомневаюсь, что это вообще возможно только с регулярным выражением. – musefan

+0

Regex - неправильный инструмент для этого. Googeling «содержимое div php» быстро приводит к http://stackoverflow.com/questions/6491598/how-can-i-get-a-div-content-in-php. Я предлагаю вам попробовать методы, описанные там. – Taemyr

+0

Помимо обычного «не разобрать html с регулярным выражением»: для вашего конкретного примера (и, скорее всего, только этого) просто удалите '?', Чтобы сделать квантификатор жадным. Кроме того, неудивительно, что '(? (? = Regex) then | else)' не будет работать, я сомневаюсь, что вы хотите совместить 'then' или' else' ;-) Не стесняйтесь показать нам, что вы действительно пытались использовать построить. –

ответ

1

Вы не должны разбирать html с regex.It обязательно сбой где-то. Для вашей проблемы вы можете использовать Recursive функция php.

<div\b(?:(?R)|(?:(?!<\/?div).))*<\/div> 

Просмотреть демонстрационный файл.

https://regex101.com/r/vD5iH9/15

2

Regexp начал использоваться как инструмент для соответствия обычным языкам.

Регулярные языки набирают довольно хороший баланс между эффективными алгоритмами распознавания и выразительностью. Легко думать, что обычные языки позволяют обнаруживать все интересные подстроки.

Однако существуют ограничения на регулярные языки. Особое значение для вашей проблемы имеет тот факт, что язык согласованных парантезов не является регулярным. - Это означает, что не существует регулярного выражения, которое соответствует языку согласованных парантезов.

Это будет конец обсуждения, за исключением следующего: с течением времени язык regexp расширился таким образом, который увеличивает его выразительную силу за пределами обычных языков. В частности, PHP предлагает рекурсивный регулярный оператор (?R), который позволит вам искать подходящие сопоставления или сопоставлять <div> и </div> теги.

Вы можете изучить синтаксис этого оператора и адаптировать его для своих нужд. - Вы, однако, будете тратить свое время. Parsing html - решаемая проблема, и использование парсера DOM будет более надежным, простым в расширении и более понятным для других кодеров или для себя, когда вы вернетесь в свой код позже.

+0

Обязательная ссылка для дальнейшего уточнения: http://stackoverflow.com/a/1732454/1986513 – Taemyr