2012-11-18 3 views
0

저는 Regexes에 대해 더 많은 것을 배우기 위해 간단하고 가벼운 XML 파서 (주말 프로젝트)를 작업했습니다. 나는 애트리뷰트와 엘리먼트에서 데이터를 얻을 수 있었지만 태그를 분리하는 데 어려움을 겪고있다. 이것은 내가 가지고있는 것입니다 :Java Regex and XML

CharSequence inputStr = "<a>test</a>abc<b1>test2</b1>abc1"; 
    String patternStr = openTag+"(.*?)"+closeTag; 

    Pattern pattern = Pattern.compile(patternStr); 
    Matcher matcher = pattern.matcher(inputStr); 

    StringBuffer buf = new StringBuffer(); 
    boolean found = false; 
    while ((found = matcher.find())) { 
     String replaceStr = matcher.group(); 
     matcher.appendReplacement(buf, "found tag (" + replaceStr + ")"); 
    } 
    matcher.appendTail(buf); 

    String result = buf.toString(); 
    System.out.println(result); 


Output: found tag (<a>test</a>abc<b1>test2</b1>)abc1 

전체 태그가 아닌 모든 태그에서 'found tag'를 끝내야합니다. 내가 그걸 할 수있는 어떤 방법이라도? 감사.

+5

수사학 질문 : 한 문장으로 왜 XML에서 정규 표현식을 사용하려고하는지 설명 할 수 있습니까? – Tomalak

+0

@Tomalak 정말 다른 것이 효과가 있을지 모르겠다. 너는 무엇을 제안 하겠는가? – user1681891

+0

XML 파서 만 XML에서 사용해야합니다. [기본 제공 DOM API] (http://stackoverflow.com/q/33262/18771) 또는 [XOM과 같은 타사 라이브러리] (http://www.xom.nu/)를 사용할 수 있습니다. 배우고 사용하기 쉽도록되어 있습니다. 또 다른 질문 [당신이 가지고있는 옵션에 대해 논의합니다] (http://stackoverflow.com/q/373833/18771). 물론 XML/HMTL에서 정규식을 사용하지 말아야하는 이유에 대해 설명하는 StackOverflow에 대한 가장 높은 투표 응답에 의무 링크를 추가해야합니다 (http://stackoverflow.com/q/1732348/18771). – Tomalak

답변

0

다음과 같은 방법으로 시도해 볼 수 있습니다.

int count = matcher.groupCount(); 
      for(int i=0;i<count;i++) 
      { 
       String replaceStr = matcher.group(i); 
        matcher.appendReplacement(buf, "found tag (" + replaceStr + ")");  
      }