2012-07-24 3 views
0

여러 줄로 된 HTML 파일에서 빈 HTML 요소를 찾는 데 문제가 있습니다. 내 정규 표현식은 다음과 같습니다.Java regexp 패턴 빈 HTML/XML 요소 찾기

Pattern pattern = Pattern.compile("<([a-zA-Z][a-zA-Z0-9]*)[^>]*?>[\\s]*?</\\1>"); 
Matcher matcher = pattern.matcher(htmlOut); 
while (matcher.find()) 
{ 
    htmlOut = matcher.replaceAll(""); 
    matcher = pattern.matcher(htmlOut); 
} 

문제는 빈 태그 중 하나와 일치하지 않습니다.

참고 : 동일한 정규 표현식 <([a-zA-Z][a-zA-Z0-9]*)[^>]*?>[\s]*?</\1>은 (는) 장엄한 텍스트로 작동합니다.

어떤 방법이라도?

+0

Obligatory Regex/Html reply : @stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – glenatron

+3

@ 글쓴이 : 빈 태그 제거하기 물론 정규 표현식으로 가능한 영역에서. HTML도 있습니다. –

답변

3

패턴은 정상이지만 잘못 사용하고 있습니다. replaceAll()이 문자열에서 호출되며 정규 표현식 객체에서는 호출되지 않습니다.

htmlOut = htmlOut.replaceAll("<([a-zA-Z][a-zA-Z0-9]*)[^>]*>\\s*</\\1>", ""); 

당신은하지만 게으른 한정사가 필요하지 않습니다 -하지만이 경기 결과에 영향을 미치지 않을 것 하나 replaceAll 충분하다 -

또한, 필요는 일치를 반복 없습니다.

+0

제안 해 주셔서 감사합니다. Tim! 아쉽게도이 방법이 작동하지 않습니다. 단순히 하나의 빈 태그를 찾지 않습니다. 없음. 나는 왜 그런지 이해하지 못한다. 이미 matcher.find()를 시도했지만 false도 반환합니다. – kernel

+0

그것은 나를 위해 작동 - 정규식 태그 이름과 공백 태그 이름 뒤에 어떤 공백을 허용하지 않습니다. 그게 문제라고 생각하지 않아? 그리고 한 줄로 게시 한 전체 코드를 대체 했습니까? –

+0

tidy'd 잘 들여 쓰기가 '

'이라면 앞에 공백으로 인해 빈'
'과 일치하지 않을 것입니다. 편집 : 나는'htmlOut = htmlOut.replaceAll ("\\ s * <([a-zA-Z] [a-zA-Z0-9] *) [^>] *> \\ s * \ \ s * "," "); 그것은 작동하지 않습니다. 그래, 내 코드 묶음을 너의 것으로 바꾼다) – kernel