Регулярное выражение для извлечения содержания ТЕЛА HTML

22
задан Alan Moore 14 September 2016 в 05:34
поделиться

4 ответа

Это работало бы?

((?:.(?!<body[^>]*>))+.<body[^>]*>)|(</body\>.+)

, Конечно, необходимо добавить необходимое \s для принятия во внимание < body ...> (элемент с пробелами), как в:

((?:.(?!<\s*body[^>]*>))+.<\s*body[^>]*>)|(<\s*/\s*body\s*\>.+)

Вообще-то, если задуматься, я не уверен, почему мне было нужно отрицательное предвидение... Это должно также работать (на правильно построенный xhtml документ):

(.*<\s*body[^>]*>)|(<\s*/\s*body\s*\>.+)
23
ответ дан VonC 29 November 2019 в 04:33
поделиться

XHTML был бы более легко проанализирован с синтаксическим анализатором XML, чем с regex. Я знаю, что это не то, что Вы спрашиваете, но синтаксический анализатор XML был бы в состоянии быстро перейти к узлу тела и дать Вам, поддерживают его содержание без любых проблем отображения тега, которые regex дает Вам.

РЕДАКТИРОВАНИЕ: В ответ на комментарий здесь; то, что синтаксический анализатор XML является слишком медленным.

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

метод DOM хорош для совместных использований, вытягивая теги и находя, кто то, что является ребенком. Чтения синтаксического анализатора SAX через файл в порядке и qill быстро получают информацию, которая Вы после. Regex не будет немного быстрее, чем синтаксический анализатор SAX, потому что они оба просто идут через файл и соответствие шаблона, за исключением того, что regex не выйдет из заботы о нем, нашел тег основного текста, потому что regex имеет не созданный в знании XML. На самом деле Ваш синтаксический анализатор SAX, вероятно, использует маленькие части regex для нахождения каждого тега.

9
ответ дан Karl 29 November 2019 в 04:33
поделиться

Почему Вы не можете только разделить его

</{0,1}body[^>]*> 

и взять вторую строку? Я полагаю, что это будет намного быстрее, чем поиск огромного regexp.

3
ответ дан bezmax 29 November 2019 в 04:33
поделиться
/<body[^>]*>(.*)</body>/s

замена

\1
3
ответ дан Kev 29 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: