我有以下正则表达式来查找字符串中的电子邮件(字符串中可能有0或更多电子邮件),.The表达式有4个组,其中一些组可以匹配空值:
表达式的RegexPlanet试验:
([-A-Za-z0-9._!#$%^&*|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{2,3}[\\.][a-z]{2,3})|([A-Za-z0-9.!#$%^&*|{}\"~`]+@[a-z0-9_-]+[\\.][a-z]{4})|([A-Z.a-z0-9!#$%^&*|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{3})|([A-Za-z0-9.!#$%^&*_-|{}'~`]+@[a-z0-9_-]+[\\.][a-z]{2})从matcher读取数据的代码显示了ArrayOutOfBoundsException在matchValue=matcher.group(i);上
ArrayList<String> result=new ArrayList<String>();
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(input);
Log.d(TAG,"input: "+input);
while(matcher.find())
{
String matchValue=null;
for(int i=1;i<5;i++)
{
matchValue=matcher.group(i);
if(matchValue!=null && !matchValue.equals(""))
{
Log.d(TAG, "Group no: "+i+" Value: "+matchValue+" adding to result");
result.add(matchValue);
}
else
{
Log.d(TAG, "Nothing matched for group i");
}
}
}
return result;
}代码有什么问题吗?或者这是其他东西的副作用?
预先感谢您的宝贵建议。
发布于 2013-11-06 06:17:21
试试这个:
for(int i=1; i <= matcher.groupCount(); i++)
{
matchValue=matcher.group(i);
...我不知道为什么您的代码会有问题,它似乎有四个组,所以for(int i=1; i<5;似乎是正确的。但最好让对手告诉你伯爵是什么。
发布于 2013-11-06 06:12:05
您知道是什么输入导致异常吗?通常,为了避免此异常,您可以重写for循环如下:
for(int i=1;i<=matcher.groupCount();i++)
{....}https://stackoverflow.com/questions/19804949
复制相似问题