2012-07-18 2 views
1

안녕하세요. 모든 HTML 코드가 있습니다. 그 입력에서루비에서 regex로 html을 파싱

data 1 : hello1 
data 2 : hello2 
data 3 : hello3 

: 나는이 결과 싶어 <a>(.*)</a>

안의 텍스트 싶어

<a> 
hello1 
</a> 
<a> 
hello2 
</a> 
<a> 
hello3 
</a> 
+6

[regexps '에와 HTML을 구문 분석하지 마십시오 (http://stackoverflow.com/questions/1732348/regex-match- open-tags-except-xhtml-self-contained-tags/1732454 # 1732454). – Seki

+0

대신 [Nokogiri] (http://nokogiri.org/)와 같은 전용 HTML 파서를 사용하십시오. – Stefan

답변

2

두 의견을 확장하기를, 다음 노코 기리 코드가 작동합니다 예를 들어. xpath 또는 CSS를 사용할 수 있습니다. 전용 파서는 자신의 정규식을 구르는 것보다 훨씬 강력합니다.

> require 'nokogiri' 
=> true 
> doc = Nokogiri::HTML("<a>hello1</a><a>hello2</a><a>hello3</a>") 
=> #<Nokogiri::HTML::Document:0x3ffec2494f48 name="document" children=[#<Nokogiri::XML::DTD:0x3ffec2494bd8 name="html">, #<Nokogiri::XML::Element:0x3ffec2494458 name="html" children=[#<Nokogiri::XML::Element:0x3ffec2494250 name="body" children=[#<Nokogiri::XML::Element:0x3ffec2494048 name="a" children=[#<Nokogiri::XML::Text:0x3ffec2493e40 "hello1">]>, #<Nokogiri::XML::Element:0x3ffec249dc88 name="a" children=[#<Nokogiri::XML::Text:0x3ffec249da80 "hello2">]>, #<Nokogiri::XML::Element:0x3ffec249d878 name="a" children=[#<Nokogiri::XML::Text:0x3ffec249d670 "hello3">]>]>]>]> 
> doc.css('a').each { |node| p node.text } 
"hello1" 
"hello2" 
"hello3" 
=> 0 

업데이트 : 이미 설치하지 않은 경우 nokogiri gem이 필요합니다.

sudo gem install nokogiri 

당신의 설정에 따라, 당신은 또한 앞에 추가해야 할 수 있습니다

require 'rubygems' 
+0

LoadError : C : /Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/ custom_require.rb 36 '제가 을 얻었다에서 : C를 : /Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb을 : 36 : 제가 N'필요 '나'N 요구 (IRB를 행 ) : 1 C :/Ruby193/bin/irb : 12 : '

' –

+0

10x : D it worked –