2010-02-11 2 views
2

편집 : 100 % 올바른 이론은 이것을 전혀하고 싶지 않다는 것입니다. 그러나 나는 가장 도움이되는 대답을 받아 들였다.인용되지 않은 XML 속성을 인용하기위한 정규식

그래서 나는 그것을 고칠 것을 약속하는 클라이언트로부터 추한 XML을 받고 있습니다. 그 동안 나는 그것을 스스로 청소해야합니다. Java에서 정규식을 사용하여 인용되지 않은 속성 주위에 인용 부호를 추가하려고합니다. 일반적인 경우는 더 좋지만, 지금까지는 정규 표현식이 "attr1"을 참조 할 수 있도록 단 하나의 속성 만 존재합니다. 속성 값은 알 수 없으므로 검색에 포함 할 수 없습니다.

<tag attr1 = VARIABLETEXT> 
<tag attr1 = "VARIABLETEXT">not quoted</tag> 
<tag attr1 = VARIABLETEXT attr2 = "true"> 
<otherTag>buncha junk</otherTag> 
<tag attr1 = "VARIABLETEXT">"quoted"</tag> 

<tag attr1 = "VARIABLETEXT"> 
<tag attr1 = "VARIABLETEXT">not quoted</tag> 
<tag attr1 = "VARIABLETEXT" attr2 = "true"> 
<otherTag>buncha junk</otherTag> 
<tag attr1 = "VARIABLETEXT">"quoted"</tag> 

EDIT로 전환해야 : 내가 할 노력하고있어 일을하지 말라고 말해 주셔서 대단히 감사합니다. 그러나 이것은 다소 임의적 인 것이 아니며, XML을 사용하여 모든 "do not do it"문제를 해결할 것입니다. 다른 스레드를 읽었습니다. 특정 해킹에 대한 구체적인 도움을 찾고 있습니다.

+0

vi filename.xml; ': % s/attr1 = false/attr1 = "false"/ g' ... Windows 용 gVim도 있습니다. –

+0

유일한 일시적인 이유가 있다면 사전 처리를 위해 클리닝/유효성 검사 라이브러리를 사용하지 않는 이유는 무엇입니까? – prodigitalson

+0

한 가지 질문 : 'VARIABLETEXTattr2'에서 어떻게 나누어 말할 수 있습니까? 다음 속성이'attr'로 시작하는 것이 사실입니까? 또는 대문자/소문자 스위치? –

답변

2

OK, 주어진 제약 조건, 당신 수 :

<tag attr1 = "\1" 

로 교체

검색

<tag attr1\s*=\s*([^" >]+) 

과 그래서, 자바, 그 (RegexBuddy에 따라) 수 :

String resultString = subjectString.replaceAll("<tag attr1\\s*=\\s*([^\" >]+)", "<tag attr1 = \"$1\""); 

EDIT : 단순화 된 정규식.

+0

죄송 합니다만, 변수 텍스트와 attr2 사이에 공백이 있습니다. – Instantsoup

+0

아, 그럴 경우 훨씬 쉽습니다. 편집 할 것입니다. –

5

마크 업 언어 수정/분석/처리에는 정규식을 사용하지 마십시오. Read here why.

tidy과 같은 용서할 수있는 구문 분석기를 사용하면 몇 가지 간단한 단계로 문서를 읽고 수정할 수 있습니다. 사용할 수있는 Java library (jtidy)이 있습니다.

+0

해당 스레드 참조 주셔서 감사합니다. 그것은 살 가치가있는 삶을 만들었습니다. – prodigitalson

+1

그래, 그걸 읽었 어. 누구나 설교없이 정규 표현식으로 나를 도울 수 있습니까? – Instantsoup

+0

아니요, 죄송합니다. 100 % 올바르게 할 수있는 방법이 없기 때문에 항상 이상한 구석이 있습니다. 파서를 사용할 수없는 이유는 무엇입니까? – Tomalak

관련 문제