2017-04-05 5 views
0

正規表現を使用して文字列内の一部のテキストを照合しようとしています。indexOfは常に正規表現を使用して-1です

問題は、一致する場合でも常に-1です。

holder.textViewPublisher.setText(post.getPublisher()); 

Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b"); 

int start = post.getPublisher().indexOf(tagMatcher.toString()); 
int end = start + tagMatcher.toString().length(); 

なぜスタートが常に-1ですか?

+1

一致がない場合は-1を返します。 – cyroxis

答えて

1

これは間違っているためです。 String.indexOf()は正規表現を使用していませんが、サブストリング(あなたの場合は"[#]+[A-Za-z0-9-_]+\\b")を探します。

Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b"); 

Matcher m = tagMatcher.matcher(post.getPublisher()); 
if (m.find()) { 
    // matches 
    int start = m.start(); 
    int end = m.end(); 
} 

find()は、パターンの出現箇所をすべて検索するために複数回呼び出すことができます。

コードは次のようなものでなければなりません。詳細はPatternMatcherのドキュメントをご覧ください。

+0

ありがとうございました! –

1

正規表現パターン自体のインデックスを検索するのではなく、文字列として検索しているため、-1が返されます。一致のインスタンスを見つけるには、Matcherオブジェクトを使用する必要があります。

関連する問題