Java正则表达式找不到我的Char类

Java正则表达式找不到我的Char类,java,android,regex,Java,Android,Regex,很简单,下面看到的idParser没有在我的passedUrl字符串中找到数字。 以下是Lod.d的详细记录: 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. 这是麻烦的地方 Log.d("WEBVIEW_REGEX", "P

很简单,下面看到的idParser没有在我的passedUrl字符串中找到数字。 以下是Lod.d的详细记录:

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.
这是麻烦的地方

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.");
注意,这是我现在变得有点草率了,我尝试了一系列不同的语法(所有的语法都在所有三种模式下工作),我甚至还查阅了文档()。这开始让我紧张起来。 使用

而不是group()内容只会产生“false”。。。有人能帮我理解为什么这个正则表达式不能工作吗


干杯

问题在于
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
没有大括号,因此没有组


所有组都从左到右编号,开头为
.Matcher.group(1)将是第一个组。Matcher.group()是整个匹配项。您需要
find()
移动到第一个匹配项。其他人已经指出有更简单的模式,如
“\\d+$”
,一个至少以一位数字结尾的字符串。

您的正则表达式真的很复杂…
\d{1,5}
具有相同的效果!
System.out.println(Pattern.compile(\\d{1,5}).matcher(“http://mymobisite.com/cat.php?id=33“”.find());
-->在这里打印
true
。@NiklasBaumstark您可能是指
.matches()
,不幸的是Java错误地命名了它的
.matches()
方法——它们尝试匹配整个输入,这与正则表达式匹配的定义相矛盾,因此需要重复一件重要的事情:为什么不直接使用
\d+
?长度有限制吗?或者您只是不知道
+
的存在吗?即使是复杂的正则表达式(按原样复制/粘贴),这里的匹配器返回true。是否确实使用了
java.util.regex
?引用问题:
.find()
…只产生“false”。这最终起作用。最后,我确实将regex替换为
(“\\d{1,5}”)
就像在这个例子中一样,一切都开始正常了。我仍然很好奇为什么我以前没有使用过其他正则表达式(像
“[0-9]{1,5}”
这样的东西绝对不会产生任何结果),就像我说的,我总是用regextester v2检查我的正则表达式。是的,这是问题的一部分,但是OP说
.find()
在匹配器上返回false——这与logic@fge这个模式很有效(在Java 7中)。有一刻我想知道他是否还有其他竖线符号,或者他是否会将
|
绑定得比字符类序列更紧:
“\d\d\d(\d\d\d)\d\d(\d\d\d)\d\(\d\d)
=10位。
idParse: 33