2010-12-16 5 views
3

가끔 이스케이프 처리되지 않은 앰퍼샌드가 포함 된 XML 데이터를 처리해야하고 제작자가 &으로 이스케이프 처리하거나 CDATA 섹션에 넣을 수 없습니다.XML 정리를위한 정규식

&을 & amp으로 바꿀 정규식을 찾고 있습니다. 그것의 실체의 일부가 아닌 경우. 이런 식으로 뭔가 : (?! (A | APOS | quot | LT |된다)) &이

불행하게도, 내 프로그래밍 환경은 "POSIX 1003.2 정규 ​​표현식 확장"을 지원 (http://www.kernel.org/doc/man-pages/online/pages/man7/regex.7.html 참조)하지 연산자를 부족한 것 같다하는 "!" 여기에 필요합니다.

아이디어가 필요한 정규 표현식을 만드는 방법?

+1

올바른 "XML-ish"응답은 유효성 검사기를 통해이를 실행하고 "형식이 올바르지 않은 XML"로 거부하는 것입니다. XML 설계자들이 실생활에서 가끔씩 잘못된 입력을 처리하고 함께 작업해야한다는 사실을 허용하지 않는 것은 부끄러운 일입니다. – Spudley

+0

@ Spudley : 저는 실제로 유효성 검사기를 통해 XML 파일을 실행합니다. 내가 잘못 형성된 부분을 어떻게 알아 차 렸는지. 불행히도 그 잘못된 XML을 생산하는 Microsoft 제품과 "표준"은 "옵션"을 의미하는 것으로 보입니다. –

+0

hehe. 마이크로 소프트 어? 그 수치. (상업적 지원이 경영진이 종종 MS를 사기 위해주는 이유이기 때문에 주제를 더 벗어나면 MS가 당신을 위해 그것을 고칠 준비가되어 있는지 궁금합니다. 물론 아닙니다. – Spudley

답변

4

측면 사고 : &amp 모든 & 다음 (예를 들어) &apos 모든 &apos (등) 교체 교체? 당신은 일부를 캡처 그룹을 사용할 수 돌려 놓을 수 - &(apos)

0

을 대신 당신이 뭔가 긍정적 인 정규식 일치하지를 검색 할 수있는 음의 정규식 일치 뭔가, 뭔가 같은 검색의 :

! ... &(?(amp|apos|quot|lt|gt);) 

I을 당신이 링크 한 전체 페이지를 읽지는 않았지만 그것이 가능해야한다고 확신합니다.