1

文字列内の数字を検索しようとしています。数字を見つけるのは\dで行われることは知っていますが、次のようなサンプルテキストで試してみると次のようになります。

127.0.0.1 - - [11/Dec/2012:11:57:36 -0500] "GET http:// localhost/ HTTP/1.1" 503 418 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"

私のJavaコードを使用する

Pattern test = Pattern.compile("\\d");
testLine = in.readLine(); // basically the text above 
// extract date and time log in and number of times a user has hit the page
numTimesAccess++; // increment number of lines in a count   
System.out.println(test.matcher(testLine).group());
System.out.println(test.matcher(testLine).start());
System.out.println(test.matcher(testLine).end());

一致するものが見つからないことを示すエラー例外が発生します。正規表現のパターンに問題があるか、パターンに一致するテキストにアクセスしようとしている方法に問題があります。

4

4 に答える 4

6

まず、Matcher.group()を呼び出す前に、Matcher.find () を呼び出す必要があります。

"\\d+"127 を 1 桁と見なす場合は、正規表現として使用します。

        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(s);
        while(m.find()){
        System.out.println(m.group() + " " + m.start() + " " + m.end());
        }
于 2012-12-12T16:07:29.563 に答える
0

\d+の代わりに\d*を使用してみてください。この投稿を見てください-: 文字列内の数字を見つける。

于 2012-12-12T16:39:19.513 に答える
0

本当に1桁を検索したい場合は、次のものが必要です。

Pattern pattern = Pattern.compile("\\d");
Matcher matcher = pattern.matcher(testline);
while (matcher.find()) {
    System.out.println(matcher.group());
}

非浮動小数点数を検索する場合は、正規表現をに変更し"\\d+"ます。

于 2012-12-12T16:09:41.167 に答える