Java正则表达式在字符串中查找数字

Java正则表达式在字符串中查找数字,java,regex,Java,Regex,我试图在字符串中查找数字。我知道查找数字是由\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代

我试图在字符串中查找数字。我知道查找数字是由\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());
我收到一个错误异常,指出找不到匹配项。我的正则表达式模式有问题,或者我试图访问与模式匹配的文本的方式有问题。

首先,您应该在调用之前调用

使用“<代码>”\d+“< /代码>为正则表达式,如果将127作为一个整数来表示。

        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(s);
        while(m.find()){
        System.out.println(m.group() + " " + m.start() + " " + m.end());
        }
首先,您应该在调用之前调用

使用“<代码>”\d+“< /代码>为正则表达式,如果将127作为一个整数来表示。

        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher(s);
        while(m.find()){
        System.out.println(m.group() + " " + m.start() + " " + m.end());
        }

如果你真的想找到个位数,你需要:

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

如果要查找非浮点数,请将正则表达式更改为
“\\d+”

如果确实要查找单个数字,则需要:

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

如果要查找非浮点数,请将正则表达式更改为
“\\d+”

尝试使用\d*而不是\d+。 看看这篇文章-:

尝试使用\d*而不是\d+。 看看这篇文章-:

只需添加并使用简单的ktx:

 fun String.digits() = 
      Pattern.compile("\\d+").matcher(this).run { if (find()) group() else "" }!!

只需添加并使用简单的ktx:

 fun String.digits() = 
      Pattern.compile("\\d+").matcher(this).run { if (find()) group() else "" }!!

我试过,我想我去掉了while外观,只运行一次。第一次matcher.find()为true,然后当我打印出来时,仍然抛出了一个异常。如果您只需要第一次匹配,请将
替换为
,而
如果得到异常,因为你总是创建一个新的
Matcher
,而不是只使用一个。我试过,我想我去掉while外观,只运行一次。第一次matcher.find()是真的,然后当我打印出来时,我仍然抛出了一个异常。如果你只想要第一个匹配,用
替换
,而
如果你得到异常,因为你总是创建一个新的
matcher
,而不是只使用一个。我试过了,但还是什么都没有。顺便说一句,我正在ubuntu linux上运行这段代码。@jonathan1987你能发布你尝试过的代码并提及异常吗。模式测试=模式编译(\\d”);testLine=in.readLine();//基本上,上面的文本是System.out.println(test.matcher(testLine.group());抛出的异常:线程“main”java.lang.IllegalStateException中的异常:在logfilevarnish.ParseLogFile.main(ParseLogFile.java:23)的java.util.regex.Matcher.group(Matcher.java:468)和java.util.regex.Matcher.group(Matcher.java:428)中找不到匹配@jonathan1987你应该先调用Matcher.find(),然后再调用group(),检查我的编辑。我试过了,但还是一无所获。顺便说一句,我正在ubuntu linux上运行这段代码。@jonathan1987你能发布你尝试过的代码并提及异常吗。模式测试=模式编译(\\d”);testLine=in.readLine();//基本上,上面的文本是System.out.println(test.matcher(testLine.group());抛出的异常:线程“main”java.lang.IllegalStateException中的异常:在logfilevarnish.ParseLogFile.main(ParseLogFile.java:23)的java.util.regex.Matcher.group(Matcher.java:468)和java.util.regex.Matcher.group(Matcher.java:428)中找不到匹配@jonathan1987你应该先打电话给Matcher.find(),然后再打电话给group(),查看我的编辑谢谢我现在收到了感谢大家的帮助谢谢我现在收到了感谢大家的帮助