2009-09-21 4 views

Répondre

2

Donc, pour mettre en œuvre la réponse 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"] 

... vous vous retrouvez avec un tableau des bits de la chaîne entre les pauses HTML.

+2

Un peu plus simple avec juste/
/i –

+0

merci glenn qui est le meilleur. –

3

Si vous pouvez briser sur les expressions régulières, utilisez le séparateur suivant:

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

Explication:

Un équerre gauche, zéro ou plusieurs espaces, B ou b, R ou R, zéro ou plus d'espaces, zéro ou plusieurs barres obliques

Pour utiliser l'expression rationnelle, regardez ici:
http://www.regular-expressions.info/ruby.html

+0

Comment puis-je briser? est-ce que j'utilise gsub? string.gsub (<\ s * [Bb] [Rr] \ s * \/*>)? –

+1

On dirait que "split" est ce dont vous avez besoin. –

0

Si vous analysez la chaîne avec Nokogiri, vous pouvez parcourir et ignorer tout autre que des éléments de texte:

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"] 

Notez que vous devez rechercher la première balise p car Nokogiri encapsulera le tout en <!DOCTYPE blah blah><html><body><p>YOUR TEXT</p></body></html>.

1

99% de Pesto du chemin, mais Nokogiri possible de créer un fragment de document qui ne boucle pas le texte de la déclaration:

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