как разбить теги <br> <br/> <br /> в строке?
Вопрос
у меня есть строка с кучей тегов разрыва.
к сожалению, они нерегулярны.
<Br> <BR> <br/> <BR/> <br />
и т. д...
я использую нокогири, но не знаю, как приказать ему разбивать строку на каждом теге разрыва....
Спасибо.
Решение
Итак, чтобы реализовать ответ iftrue:
a = 'a<Br>b<BR>c<br/>d<BR/>e<br />f'
a.split(/<\s*[Bb][Rr]\s*\/*>/)
=> ["a", "b", "c", "d", "e", "f"]
... у вас остается массив битов строки между разрывами HTML.
Другие советы
Если вы можете разбивать регулярные выражения, используйте следующий разделитель:
<\s*[Bb][Rr]\s*\/*>
Объяснение:
Одна левая угловая скобка, ноль или более пробелов, B или b, R или r, ноль или более пробелов, ноль или более косых черт.
Чтобы использовать регулярное выражение, посмотрите здесь:
http://www.regular-expressions.info/ruby.html
Песто на 99% это сделал, однако Нокогири поддерживает создание фрагмента документа, который не переносит текст в объявление:
text = Nokogiri::HTML::DocumentFragment.parse('<Br>this<BR>is<br/>a<BR/>text<br />string').children.select {|n| n.text? and n.content }
puts text
# >> this
# >> is
# >> a
# >> text
# >> string
Если вы проанализируете строку с помощью Nokogiri, вы сможете просмотреть ее и игнорировать все, кроме текстовых элементов:
require 'nokogiri'
doc = Nokogiri::HTML.parse('a<Br>b<BR>c<br/>d<BR/>e<br />f')
text = []
doc.search('p').first.children.each do |node|
text << node.content if node.text?
end
p text # => ["a", "b", "c", "d", "e", "f"]
Обратите внимание, что вам нужно искать первый тег p, потому что Нокогири обернет все это в <!DOCTYPE blah blah><html><body><p>YOUR TEXT</p></body></html>
.