2013-06-06 8 views
3

루비 정규식은 :은 <일치하지 않고>

<Comment>10 < 100</Comment> 

내가 올바르게 제거 할 수 있도록하기 위해 내부 <를 식별 할 수 있도록하려면 다음과 같은 XML을 감안할 때,하지만 난 모든 떠나고 싶지 매칭 다른 콘텐츠는 그대로 유지됩니다. 그러나 그것은 질식, 우리는 XML 파서, REXML을 사용하고 있습니다 : [?]

나는이 옵션의 어떤 종류를 포함 할 것이다 있으리라 믿고있어,하지만 난 Rubular 나

주에 실험을 알아 내기 위해 관리하지 않은 위의 시나리오에서. 반대로 Nokogiri는 내용에서 앰퍼샌드를 사용합니다.

+1

를 사용하여 XML 파서를. – meagar

+0

regexes를 사용하여 XML (또는 HTML 또는 SGML 또는 선호하는 프로그래밍 언어 등)을 구문 분석하지 마십시오. 그것은 작동하지 않습니다. 정규식은 해당 언어를 처리 할 수 ​​없습니다. 일반적으로 균형 구분 기호 (괄호, 모든 모양의 대괄호, XML 태그)를 일치시켜야 할 때마다 정규 표현식으로 가능한 영역을 벗어났습니다. 일부 언어는 주변 프로그래밍 언어와 연계 된 메커니즘을 통해 "정규식"을 확장하여 일부 작업을 수행 할 수 있지만 본질적으로 원 트릭 포니 인 해킹하고 깨지기 쉬운 코드로 마무리합니다. XML 구문 분석기를 사용하십시오. –

+2

유효한 XML이 아니므로 호환 XML 파서가 폭탄을 터뜨릴 수 없습니까? –

답변

3

이 발견하고 > 다음되지 않습니다 <의 변환 :

result = subject.gsub(/<(?![^<>]*>)/, '&lt;') 

설명 :

<  # Match a < 
(?!  # only if the following regex can't match here: 
[^<>]* # any number of characters except angle brackets 
>  # followed by a closing angle bracket. 
)  # (End of negative lookahead assertion) 
+0

대단히 감사합니다! – DVG

+3

반갑습니다. 사람들이 "XML"과 "정규식"을보고 즉시 "파서를 사용하십시오."라는 무례한 반응으로 파서가 처리해야하는 유효하지 않은 "XML"에 대한 질식을하지 않으면 나는 항상 그것을 좋아합니다. 적어도 그들은이 시간에 도움이되지 않는 Cthulhu 대답에 연결하는 것을 삼 갔다 :) –