Разбор текста, чтобы найти HTML-теги в Ruby 1.9.x - PullRequest
1 голос
/ 08 марта 2011

Я хочу иметь возможность сопоставлять текст между двумя тегами, начиная с открывающего тега и заканчивая закрывающим тегом.

Скажем, у меня есть этот блок текста в переменной с именем 'text':

some text some text some text some text some text
<some_tag>
  some text some text some text some text some text
</some_tag>
some text some text some text some text some text

Я хочу проанализировать содержимое 'text', ничего не делая, пока не найдет открывающий тег, в данном случае 'some_tag', и как только он найдет открывающий тег, я хочу, чтобы он захватывал все, пока тег не закрывается.

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

Буду признателен за любые и все указатели, спасибо!

1 Ответ

4 голосов
/ 08 марта 2011

Вы должны использовать парсер для HTML. Regex и HTML имеют тенденцию создавать нестабильную смесь, которая приводит к безумию в больших дозах.

Использование Нокогири :

require 'nokogiri'

html = <<EOT
some text some text some text some text some text
<p>
  some text some text some text some text some text
</p>
some text some text some text some text some text
EOT

doc = Nokogiri::HTML::DocumentFragment.parse(html)

puts doc.search('p').map { |n| n.inner_text }

>>   some text some text some text some text some text

Это поиск по фрагменту HTML, поиск <p> тегов. Для каждого найденного будет извлечен внутренний текст.

Я использую CSS-режим Nokogiri, используя "p". Вместо этого я мог бы использовать XPath, но CSS понимают все больше людей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...