2013-07-08 1 views
1

루비에 정규식을 사용하여 마크 업 (html)을 캡쳐해야합니다. (yep 나는 이것이 나쁘다는 것을 알고 있지만, 원래 마크 업은 실제로 형식이 잘못되었으므로 어떤 대안도 발견하지 못했습니다. 내가 원래 마크 업을 변경할 수 없습니다 (!와 의미있는 클래스가 전혀 없다)으로정규식을 사용하여 HTML 주석의 내용을 캡쳐

<h3 class="grey" style="font-size:18pt;"><!-- #BeginEditable "Title" -->Sample Title 
<!-- #EndEditable --></h3> 



<!-- #BeginEditable "Text" --><p>Foo bar </p> 
<p> 
</p><ul> 
<li>Sample li</li> 
<p></p> 
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> 
<p>Foo bar<span class="blue">Lorem ipsum dolor</span></p></blockquote> 
<!-- #EndEditable --> 

, 나는 몇 가지 정규식 마법을 사용하기로 결정했습니다 : 그래서 나는 다음과 같다 원본 문서가 있습니다.

나는 그렇게 같은 정규식 코멘트 내에서 내용을 캡처하려고 : 그러나 항상 때이 실패 내부의 내용을 캡처 .*를 사용하여 마크 업 내부 !있을 때

<!-- #BeginEditable "(Title|Text|Foo)" -->\s*([^!]+)\s*<!-- #EndEditable --> 

는 분명히 이것은 실패 html 마크 업입니다 (일반 텍스트가 캡처 됨). 내가 뭔가를 놓친거야?

<!-- #BeginEditable "(Title|Text|Foo)" -->(.*?)(?=<!-- #EndEditable -->) 

여기 rubular의 데모입니다 : (? 부정적 예측과 함께, 즉 버전)

+0

'노코 기리'를 사용하십시오. 이것에 대한 완벽한 보석. –

+0

일치하는 컨테이너가 없기 때문에 nokogiri가 도움이 될지 의심 스럽지만 마크 업에있는 컨테이너에 주석 만 표시합니다. Jerry의 대답은 트릭을했습니다! – Figedi

답변

0

나는 당신이 긍정적 예측를 사용할 수있다 같아요.

참고 도트를 줄 바꿈과 일치 시키려면 m 한정자를 사용했습니다. 따라서 점은 앞으로 <!-- #EndEditable -->을 찾을 때까지 모든 문자와 일치합니다.

+0

신난다, 그것은 트릭을했다! – Figedi

+0

@FelixK. 다행! :) – Jerry

관련 문제