2012-02-02 2 views
0

태그 내부에 텍스트를 가져 오려고합니다. 즉 <text>입니다. 내가 뭐하는 거지 : 전에 < (긍정적 인 lookbehind) 모든 문자 0 번 이상 및 > (긍정적 예측) 다음 :자바 :이 정규식에 어떤 문제가 있습니까?

Pattern pattern = Pattern.compile("(?<=\\<).*(?=\\>)"); 

내가이라고 생각합니다.

Matcher m = pattern.matcher(data); 
if (!m.matches()) continue; //Called in a for loop 

그러나 일치 입력 (예 : 입력 <text> some other stuff here)이 없습니다.

내가 뭘 잘못하고 있니?

답변

5

m.matches() 그러나 m.find()을 사용하지 마십시오. JavaDocmatches()에에서

:

시도는 영역 전체를이 패턴과 일치합니다.

+0

감사합니다!하지만 지금은 '일치하는'내용이 무엇인지 모르겠습니다.이 경우 전체 영역이 무엇입니까? – Cratylus

+0

@ user384706 전체 영역은 일치하려는 전체 문자열, 즉 '데이터'의 전체 내용입니다. 당신의 경우. – Thomas

1

이 일치를 시도 할 수 있습니다 :

public static void main(String[] args) { 
    String input = "<text> Some Value </text> <a> <testTag>"; 
    Pattern p = Pattern.compile("<(\\w.*?)>"); 
    Matcher m = p.matcher(input); 

    while(m.find()){ 
     System.out.println(m.group(1)); 
    } 
} 
5

당신이 matches()를 사용하고, 전체 입력 문자열 표현을 일치해야합니다. 하위 문자열을 찾으려면 find()을 대신 사용할 수 있습니다.

0

나는 꽤 정규 표현식을 이해하지 못하는,하지만 나를 위해 작동합니다

String text = "<text>"; 
Pattern p = Pattern.compile(".*<(.*)>.*"); 
Matcher m = p.matcher(text); 
System.out.println(m.matches()); 
System.out.println(m.group(1)); 

이 표시됩니다

true 
text 

당신이 무엇을 필요가 있습니까?

관련 문제