2009-09-21 2 views
0

У меня есть строка с кучей разрыва тегов.Как взорваться <br><br/><br /> теги в строке?

К сожалению, они не соответствуют действительности.

<Br> <BR> <br/> <BR/> <br /> и т.д ...

я использую nokogiri, но я не знаю, как сказать ему, чтобы разбить строку на каждой метке излома ....

спасибо.

ответ

2

Так реализовать ответ 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-брейков.

+2

Немного проще с просто/
/i –

+0

благодарит Гленна, что является лучшим. – 2009-09-21 20:27:45

3

Если вы можете разбить на регулярных выражений, используйте следующий разделитель:

<\s*[Bb][Rr]\s*\/*> 

Объяснение:

Один левый угол скобка, ноль или более пробелов, B или B, R или R, равна нулю или больше пробелов, ноль или более косые черты.

Для использования регулярных выражений, смотрите здесь:
http://www.regular-expressions.info/ruby.html

+0

как я разорвать его? я использую gsub? string.gsub (<\ s * [Bb] [Rr] \ s * \/*>)? – 2009-09-21 18:58:32

+1

Похоже, что «раскол» - это то, что вам нужно. –

0

Если разобрать строку с 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, потому что Nokogiri обернет все это в <!DOCTYPE blah blah><html><body><p>YOUR TEXT</p></body></html>.

1

песто в 99% пути там, однако Nokogiri поддерживает создание фрагмента документа, который не обернуть текст в декларации:

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 
Смежные вопросы