如何找出没有正则表达式格式的连续字符数。 例如,我有一个文本“ youarenovalid21” 而正则表达式是“(\ d +)” 因此,由于文本没有数字,因此我们无法得出最多14个字符的字符。 所以我想保存文本没有正则表达式的字符数是13。 谢谢。
答案 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优秀的测试工具。