2014-01-21 2 views
-1
나는 누군가가 이런 현상이 발생하는 이유는 다음 이해하는 데 도움 수있는 기대했다

:귀찮은 정규 표현식

String s = "tbody\n" +"a\n" +"/tbody"; 
    Pattern p = Pattern.compile("tbody[^(/tbody)]+/tbody"); 

    Matcher m = p.matcher(s); 

    while(m.find()){ 
     System.out.println("found: \n\n"+m.group());    
    } 

출력은 다음과 같습니다

found: 

tbody 

a 

/tbody 

그러나 String s = "tbody\n" +"ao\n" +"/tbody" 그것을 (I는 A 다음 오 추가)하는 경우 아무것도 인쇄하지 않습니다. 아무도 내가 누락 된 것을 말할 수 있습니까?

NetBeans 7.4를 사용하고 있습니다.

+0

정규 표현식에서'[..]'는 * 문자 클래스 *입니다 - 이제 이름을 알기 때문에보세요 :) 어떤 경우에는 * 욕심이 많지 않거나 게으른 한정 기호 *를 사용하십시오 :'tbody (. *?)/tbody' (* 단어 경계 *에도 관심이있을 수 있습니다). – user2864740

+0

HTML을 정규식으로 구문 분석하는 방법을 알아 내려는 것 같습니다. HTML은 일반 언어가 아니기 때문에 이것은 비 스타터입니다. [이 답변을 읽어주십시오 (http://stackoverflow.com/a/1732454/18157) –

+0

@ 짐 가르슨 내가 뭘하려고하는지 잘 모르겠 파싱입니다. 특정 웹 사이트에서 정보를 수집해야하는데, 그 태그 사이에 거짓말을합니다. – user2847339

답변

1

[^(/tbody)]은 귀하가 생각한 것과 다릅니다. /tbody이 아닌 문자열을 의미하지는 않습니다. 대신 각 문자를 하나씩 무시합니다. 이제 /tbodyo이 포함되어 있고 o 을 추가 했으므로 (o이 무효화되었습니다) 그것이 더 이상 일치하지 않는 이유입니다.

시도 대신 ox를 추가하고 ( x 당신이 부정 문자 중 아니므로)는 를 계속 작동합니다.