首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图从regex中的各个组获取数据失败。

试图从regex中的各个组获取数据失败。
EN

Stack Overflow用户
提问于 2013-11-06 05:42:09
回答 2查看 51关注 0票数 1

我有以下正则表达式来查找字符串中的电子邮件(字符串中可能有0或更多电子邮件),.The表达式有4个组,其中一些组可以匹配空值:

表达式的RegexPlanet试验

代码语言:javascript
复制
          ([-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读取数据的代码显示了ArrayOutOfBoundsExceptionmatchValue=matcher.group(i);

代码语言:javascript
复制
   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;
}

代码有什么问题吗?或者这是其他东西的副作用?

预先感谢您的宝贵建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-06 06:17:21

试试这个:

代码语言:javascript
复制
for(int i=1; i <= matcher.groupCount(); i++)
{
    matchValue=matcher.group(i);
    ...

我不知道为什么您的代码会有问题,它似乎有四个组,所以for(int i=1; i<5;似乎是正确的。但最好让对手告诉你伯爵是什么。

票数 1
EN

Stack Overflow用户

发布于 2013-11-06 06:12:05

您知道是什么输入导致异常吗?通常,为了避免此异常,您可以重写for循环如下:

代码语言:javascript
复制
for(int i=1;i<=matcher.groupCount();i++)
        {....}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19804949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档