2012-02-02 73 views
0

我想获得标签内的文字,例如<text>。我做:Java:这个正则表达式有什么问题?

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

我认为这表示:任意字符0次或更多次,以前是<(正回顾后),并随后>(正前瞻)。

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

但是没有匹配例如输入​​。

我在这里做错了什么?

回答

5

请勿使用m.matches(),而应使用m.find()

JavaDocmatches()

尝试的整个区域与模式相匹配。

+0

谢谢!但我现在还不确定'匹配'是什么意思。我的意思是整个区域在这种情况下是什么 – Cratylus 2012-02-02 08:06:54

+0

@ user384706整个区域是您想要匹配的整个字符串,即“data”的整个内容在你的情况。 – Thomas 2012-02-02 08:58:35

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 

是你需要什么?

相关问题