gpt4 book ai didi

java - 如何使用 Java API 确定正则表达式匹配失败的位置

转载 作者:太空狗 更新时间:2023-10-29 22:35:30 24 4
gpt4 key购买 nike

我有一些测试,我使用正则表达式验证输出。当它失败时,它报告输出 X 与正则表达式 Y 不匹配。

我想添加一些指示,说明匹配失败的字符串中的位置。例如。匹配器在回溯之前在字符串中得到的最远距离是多少。 Matcher.hitEnd() 是我正在寻找的一种情况,但我想要更通用的东西。

这可能吗?

最佳答案

如果匹配失败,Match.hitEnd() 会告诉您是否可以匹配更长的字符串。此外,您可以指定输入序列中的一个区域,将搜索该区域以找到匹配项。所以如果你有一个无法匹配的字符串,你可以测试它的前缀以查看匹配失败的地方:

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

public class LastMatch {
private static int indexOfLastMatch(Pattern pattern, String input) {
Matcher matcher = pattern.matcher(input);
for (int i = input.length(); i > 0; --i) {
Matcher region = matcher.region(0, i);
if (region.matches() || region.hitEnd()) {
return i;
}
}

return 0;
}

public static void main(String[] args) {
Pattern pattern = Pattern.compile("[A-Z]+[0-9]+[a-z]+");
String[] samples = {
"*ABC",
"A1b*",
"AB12uv",
"AB12uv*",
"ABCDabc",
"ABC123X"
};

for (String sample : samples) {
int lastMatch = indexOfLastMatch(pattern, sample);
System.out.println(sample + ": last match at " + lastMatch);
}
}
}

这个类的输出是:

*ABC: last match at 0
A1b*: last match at 3
AB12uv: last match at 6
AB12uv*: last match at 6
ABCDabc: last match at 4
ABC123X: last match at 6

关于java - 如何使用 Java API 确定正则表达式匹配失败的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5666486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com