加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何确定正则表达式使用Java API无法匹配

发布时间:2020-12-14 06:33:34 所属栏目:百科 来源:网络整理
导读:我有测试我用正则表达式验证输出。当它失败时,报告输出X与正则表达式Y不匹配。 我想添加一些指示字符串中匹配失败的位置。例如。在追溯之前,匹配者在字符串中最远的是什么? Matcher.hitEnd()是我正在寻找的一个例子,但是我想要一些比较通用的东西。 这可
我有测试我用正则表达式验证输出。当它失败时,报告输出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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读