没有正则表达式形式的连续字符数

时间:2020-03-08 19:03:32

标签: java regex

如何找出没有正则表达式格式的连续字符数。 例如,我有一个文本“ youarenovalid21” 而正则表达式是“(\ d +)” 因此,由于文本没有数字,因此我们无法得出最多14个字符的字符。 所以我想保存文本没有正则表达式的字符数是13。 谢谢。

2 个答案:

答案 0 :(得分:0)

要获取正则表达式跳过的文本,请记住初始位置(0)/上一个正则表达式匹配后的下一个位置(m.end()),然后将其与匹配的开始位置进行比较,由m.start()返回。

示例

String input = "youarenovalid21";
Matcher m = Pattern.compile("\\d+").matcher(input);
int start = 0;
while (m.find()) {
    if (start < m.start())
        System.out.println("Not in regex: " + input.substring(start, m.start()));
    System.out.println("In regex: " + m.group());
    start = m.end();
}
if (start < input.length())
    System.out.println("Not in regex: " + input.substring(start));

输出

Not in regex: youarenovalid
In regex: 21

示例2

String input = "1a22bb333ccc4444dddd";

输出

In regex: 1
Not in regex: a
In regex: 22
Not in regex: bb
In regex: 333
Not in regex: ccc
In regex: 4444
Not in regex: dddd

或者,您确保正则表达式将始终捕获所有内容:

String input = "1a22bb333ccc4444dddd";
for (Matcher m = Pattern.compile("(\\D*)(\\d*)").matcher(input); m.find(); ) {
    if (m.start(1) < m.end(1))
        System.out.println("Not digits: " + m.group(1));
    if (m.start(2) < m.end(2))
        System.out.println("Digits: " + m.group(2));
}

输出

Digits: 1
Not digits: a
Digits: 22
Not digits: bb
Digits: 333
Not digits: ccc
Digits: 4444
Not digits: dddd

答案 1 :(得分:0)

为此,请使用Matcher::start,如下所示:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String str = "youarenovalid21";
        Pattern pattern = Pattern.compile("(\\d+)");
        Matcher matcher = pattern.matcher(str);
        int start = 0;
        if (matcher.find()) {
            start = matcher.start();
        }
        System.out.println(start);
    }
}

输出:

13

我还建议您检查由Oracle提供的this优秀的测试工具

相关问题