如何计算与给定正则表达式

时间:2017-04-06 23:37:04

标签: java regex

给定一个包含0个或更多与正则表达式匹配的子串的任意String,如何计算该String中与正则表达式匹配的子串的一部分中的字符数?

示例:

鉴于正则表达式匹配任何电子邮件地址和字符串“我有两个电子邮件地址:email@gmail.com和email@hotmail.com”,这将返回int值32(“电子邮件中的字符数”) @ gmail.com“plus”email@hotmail.com“)。

我似乎不够清楚。让我们假装您想要设置推文中字符数的限制,但是您希望允许人们在推文中包含他们的电子邮件地址并将其计为零个字符。

解决方案的可能方法签名:

public int lengthOfSubStringsMatchingRegex(String input, String regex)

1 个答案:

答案 0 :(得分:3)

只需遍历正则表达式的匹配组,然后使用length()提取字符数。将它们添加到您的柜台,就是这样。

public int lengthOfSubStringsMatchingRegex(String input, String regex)
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(input);

    int count = 0;
    while (m.find())
        count += m.group().length();

    return count;
}

作为替代方案,但可读性稍差,您可以直接使用偏移量:

count += m.end() - m.start();

start()返回上一场比赛的开始索引 end()返回最后一个字符匹配后的偏移量。