2012-02-02 2 views
0

タグ内のテキストを取得しようとしています。つまり、<text>です。私がやっている:前<(正の後読み)である任意の文字の0回以上の繰り返しと>(肯定先読み)に続く:Java:この正規表現で何が問題になっていますか?

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

が、私はこれが言うと思います。

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

しかし、入力​​と一致するものはありません。

私はここで間違っていますか?

答えて

5

m.matches()ではなくm.find()を使用しないでください。領域全体をこのパターンとマッチし

試み:JavaDocmatches() ONから

+0

ありがとう!しかし、私は今、どのようなものがマッチしているのかよく分かりません。この場合、全領域は何ですか? – Cratylus

+0

@ user384706全体の領域は、一致させたい文字列全体、つまり 'data'あなたの場合。 – 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 

は何が必要ということですか?

関連する問題