2011-03-08 2 views
0

두 태그 사이의 텍스트를 시작 태그에서 시작하여 닫는 태그에서 일치시킬 수 있기를 원합니다.Ruby 1.9.x에서 html 태그를 찾으려면 텍스트를 파싱

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 

내가 그것을이 경우 'some_tag'에서, 여는 태그를 찾을 때까지 아무것도하지 않고 내용 '텍스트'를 구문 분석 할 :

내가 '텍스트'라는 변수에 텍스트 블록을 말해봐 일단 태그가 열리면 태그가 닫힐 때까지 모든 태그를 캡처하려고합니다.

저는 약 1 시간 동안 블록과 정규 표현식을 속이고 있었고이를 해결하는 좋은 방법을 찾지 못했습니다.

감사합니다. 모든 포인터, 감사합니다!

답변

2

HTML 용 파서를 사용해야합니다. 정규 표현식과 HTML은 휘발성 믹스를 만드는 경향이 있으며, 많은 양의 광기를 발생시킵니다. Nokogiri를 사용

:이 <p> 태그를 찾고 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 

. 각각에 대해 내부 텍스트를 추출합니다.

나는 Nokogiri의 CSS 모드를 "p"을 사용하여 사용하고 있습니다. 대신 XPath를 사용할 수 있지만 CSS는 더 많은 사람들이 이해합니다.

+0

감사합니다. Nokogiri를 여러 번 살펴 봤지만 문서가 매우 열악하다는 것을 알았습니다. 그러나 그것은 nokogiri.org 사이트에서 직접 본 것입니다. 그것에 대한 좋은 언급이 있습니까? 감사! – Ben

+0

@Rhinoo, 문서는 그렇게 나쁘지 않습니다. 최소한 그들은 루비의 핵심 라이브러리 이상의 것들을 가지고 있습니다. 가장 좋은 방법은 자습서를 읽고 사이트의 모든 문서에서 코를 고르는 것이며 Nokokiri-Talk 메일 목록에서 흥미로운 주제를 검색하는 것입니다. 그들의 메일 목록은 개발자가 모니터링하는 주요 지원 및 장소이므로, 가장 잘 아는 사람들로부터 일을 직접 수행하는 방법에 대한 좋은 예를 얻을 수 있습니다. –

+0

@Rhinoo, 이것이 귀하의 질문에 대답한다면 대답을 표시하십시오. 감사. –