2012-01-05 7 views
0

以下に示すidParserは、passedUrl文字列内の数字を見つけられません。Java正規表現がMy Charクラスを見つけられない

01-05 11:27:48.532: D/WEBVIEW_REGEX(29447): Parsing: http://mymobisite.com/cat.php?id=33 
01-05 11:27:48.532: D/WEBVIEW_REGEX(29447): idParse: No Matches Found. 

相続人annnndトラブルのブロック: はここLod.dのためのLogCat出ています。 (http://docs.oracle.com/javase/tutorial/essential/regex/char_classes.html

Log.d("WEBVIEW_REGEX", "Parsing: "+passableUrl.toString()); 
Matcher idParser = Pattern.compile("[0-9]{5}|[0-9]{4}|[0-9]{3}|[0-9]{2}|[0-9]{1}").matcher(passableUrl); 
if(idParser.groupCount() > 0) 
    Log.d("WEBVIEW_REGEX", "idParse: " + idParser.group()); 
else Log.d("WEBVIEW_REGEX", "idParse: No Matches Found."); 

ノートでは、これは私が、私は(3つのモードすべてにhttp://www.regextester.com/index2.htmlで働くすべての検証)異なる構文の束を試してみた、今少しずさんになっていると私もドキュメントを見てきました。これは私の最終的な神経に乗り始めている。 使用

.find() 

代わりに、グループの()のものは、単に「偽」生み出す...誰かが私はこの正規表現は、仕事を得るカント理由を理解するために私を助けることができますか?

乾杯!

+3

あなたの正規表現は本当に畳み込まれています... \ d {1,5} 'は同じ効果があります! – fge

+0

'System.out.println(Pattern.compile(" \\ d {1,5} ").matcher(" http://mymobisite.com/cat.php?id=33 ").find()); ' - >ここに' true'を出力します... – fge

+0

@NiklasBaumstarkおそらく '.matches()'を意味しますが、残念ながらJavaは '.matches()'メソッドの名前を誤って入力します。正規表現マッチングの非常に定義 – fge

答えて

1

問題は、groupCount()はあなたの考えをしていないということです。代わりにidParser.find()を使用する必要があります。このように:代わりに

if(idParser.find()) 
    Log.d("WEBVIEW_REGEX", "idParse: " + idParser.group()); 
else Log.d("WEBVIEW_REGEX", "idParse: No Matches Found."); 
使用します。また、パターンを少し簡略化することができ

\d{1,5}

Matcher idParser = Pattern.compile("\\d{1,5}").matcher(passableUrl); 

全例:

String passableUrl = "http://mymobisite.com/cat.php?id=33"; 
Matcher idParser = Pattern.compile("\\d{1,5}").matcher(passableUrl); 
if (idParser.find()) 
    System.out.println("idParse: " + idParser.group()); 
else 
    System.out.println("idParse: No Matches Found."); 

出力:

idParse: 33 
+0

質問からの引用: '.find()' ...単に "false"を返します。 –

+0

Hmm。その部分を逃した。しかし、私はそれを試して、それは提供された文字列で動作します.. – Marcus

+0

ええ、私はまた、コードが動作するはずだと思う。 –

1

()の中かっこ、したがってゼログループはありません。

すべてのグループは、左から右に番号(で番号が付けられています。 Matcher.group(1)が最初のグループになります。 Matcher.group()は完全一致です。最初の試合に移動するにはfind()が必要です。他の人々は、すでに"\\d+$"のようなより単純なパターンがあり、少なくとも1桁の数字で終わる文字列を示しています。

+0

はい、それは問題の一部ですが、OPは '.find()'を返すとマッチャーはfalseを返す - これは論理を無視します – fge

+0

@fgeパターンは(Java 7では)機能します。私は彼が他の縦のバー記号を持っているのか疑問に思っていましたか、charクラスのシーケンスよりも厳密にバインドしていました: '' \ d \ d \ d \ d(\ d | \ d)\ d \ d(\ d | \ d)\ d \(\ d | \ d) "' = 10桁です。 –

関連する問題