Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Regex-获取Regex的位置不匹配_Java_Regex - Fatal编程技术网

Java Regex-获取Regex的位置不匹配

Java Regex-获取Regex的位置不匹配,java,regex,Java,Regex,我正在寻找能给我输入字符串不匹配位置的通用代码 public static boolean patternMatch(final String patternToMatch, final String valueToMatch){ if (null == patternToMatch || null == valueToMatch){ LOGGER.debug(String.format("Either patternToMatch(%s) or valu

我正在寻找能给我输入字符串不匹配位置的通用代码

public static boolean patternMatch(final String patternToMatch, final String valueToMatch){
        if (null == patternToMatch || null == valueToMatch){
            LOGGER.debug(String.format("Either patternToMatch(%s) or valueToMatch(%s) is null",patternToMatch,valueToMatch));
        }

        Pattern pattern = Pattern.compile(patternToMatch);
        final Matcher matcher = pattern.matcher(valueToMatch);
        return matcher.matches();
    }
这是给定正则表达式和值的代码,检查该值是否与正则表达式匹配。如果不匹配,则希望抛出异常,说明“位置处的匹配失败”

如何获得不匹配的位置。正则表达式可以是任何东西。有什么算法可以得到它吗


谢谢

您正在调用匹配整个主题字符串的
matcher.matches()
,因此没有任何部分与整个目标字符串不匹配,当它匹配时,整个目标字符串都匹配,我希望您可以获得匹配的值

正如您在评论中所问的那样如何获得匹配的值? 为此,您可以在调用
matcher.matches()
后调用
matcher.group()
,但是由于
matches()
方法匹配整个字符串,因此
matches.group()
将返回整个字符串,如果它不匹配,将引发异常

如果要匹配正则表达式的部分,则需要使用
find()
方法,然后group()将只返回匹配的部分

ex

String s = "this is a cat";
        Matcher m = Pattern.compile("\\bcat\\b").matcher(s);
        m.find();
        System.out.println(m.group());
上面的代码打印“cat”,因为cat是匹配的部分,但是如果您使用
m.matches()
,然后尝试调用
m.grounp()
,我将在线程“main”java.lang.IllegalStateException中抛出
异常:未找到匹配项,如果使用mathces,则抛出整个字符串


祝您愉快

比赛失败的位置是索引0。由于正则表达式使用回溯来尝试各种匹配选项,所以正则表达式不可能精确定位单个故障点。你所要求的是做不到的,好吧。正则表达式测试器如何给我们匹配的部分值?不知道,因为我不知道你们在说什么测试器。您的问题是关于Java正则表达式引擎的。它不能满足你的要求。@Aavik你认为我回答了你的问题吗?你还有其他疑问吗?