2012-04-19 5 views
0

は私が一致するようにしようとしています(一致しない) "\ \ bはW +:" 文字列の中 ":アプリ:タグで\ nPrefixを検索したり、テキスト:"Androidのパターンマッチング

コードは次のようになります。

String s = "Search\nPrefix with tag: app: or text:"; 
SpannableString str = SpannableString.valueOf(s); 
Pattern regex = Pattern.compile("\\b\\w+:"); 
Matcher m = regex.matcher(str); 

while(m.find()) { 
    // do stuff 
} 

Eclipseでデバッガでコードを実行したが、whileループが入力されない。つまり、m.find()はfalseを返す。 は、私は右?それは、文字列から同じ明示的なテキストである、それは動作するはずです、簡単

Pattern regex = Pattern.compile("app:"); 

に正規表現を変更しようとしました。しかし、まだマッチはありません。 文字列中の改行に達したときにマッチャーがマッチしなくなったと思われます。そして、何らかの形で、文字列全体をスキャンするようにマッチャーに指示するフラグや何かが必要です。

+0

それはうまくいくはずです。おそらく 'SpannableString'が気に入らないかもしれません。' Matcher m = regex.matcher(s); ' – zapl

+0

確かに、私は文字列を試しました。私はマッチを色付けしたいので、spannableを必要とし、m.find()ごとにm.start()とm.end()が必要です。 – ilomambo

+1

私の間違い、もう一度。私はここにそれを示すためにコードを単純化しましたが、実際にはwhile条件はm.find()&& --count> 0であり、カウントが原因でした。正規表現はOKでした。結論は:「あなたが仕事に疲れたら眠りにつく」。 – ilomambo

答えて

0

私の間違い、もう一度。
私はここでそれを表示するためのコードを簡略化し、実際にはwhile条件が

while(m.find() && --count>0) 

だった、とが犯人でした。正規表現はOKでした。

結論は:「仕事に疲れたら眠りにつく」

+0

heh。あなたはコードを単純化してはいけません。これらの種類の間違いが根本的な問題であることは非常に一般的です。p – keyser

+0

@Keyser、コードを単純化するときには、このような間違いがよくあります。一方、複雑な関数と呼び出しを持つ非常に長いコードを使用している場合、潜在的に人々は無関係のコードをフィルタリングする時間と忍耐を持たず、その質問を理解しようとすることもありません。特に、コードの非常にシンプルな部分を対象とする場合。私は単純化はOKだと思う、あなたはそれを正しくしなければならない。あなたがしないと、ここで私に起こったことが起こります。 – ilomambo

+0

はい、必要なのはMWE(最小の実例)です。 – keyser

関連する問題