很简单,如下所示,idParser没有在我的passUrl字符串中找到数字。 这是Lod.d的LogCat:
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 heres the the block of trouble。
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.");
请注意,这是我现在有点草率,我尝试了一堆不同的语法(所有三种模式都验证了http://www.regextester.com/index2.html)并且我甚至查阅了文档({{ 3}})。这开始变得我最后的神经。 使用
.find()
而不是group()的东西只会产生“假”......有人可以帮助我理解为什么我不能让这个正则表达式起作用吗?
干杯!
答案 0 :(得分: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
答案 1 :(得分:1)
没有( )
个括号,因此没有任何组。
所有群组都是从左到右编号,并以(
开头。 Matcher.group(1)将成为第一组。 Matcher.group()是整场比赛。您需要find()
才能转到第一场比赛。其他人已经指出有更简单的模式,比如"\\d+$"
,一个以至少一个数字结尾的字符串。