Java Matcher不适用于有效的pcre模式

Java Matcher不适用于有效的pcre模式,java,regex,regex-lookarounds,Java,Regex,Regex Lookarounds,下面是一个有效的正则表达式示例 在这里,我尝试查找xml中是否没有无效或失败 以下是模式((?!INVALID | FAIL)。*$/i 下面是java类尝试做同样的事情,但找不到匹配项 class RegexChecker { public static void main(String args[]){ String success = "this version has success in it"; String reject = "this fa

下面是一个有效的正则表达式示例

在这里,我尝试查找xml中是否没有无效或失败

以下是模式((?!INVALID | FAIL)。*$/i

下面是java类尝试做同样的事情,但找不到匹配项

class RegexChecker {
    public static void main(String args[]){
        String success = "this version has success in it";
        String reject = "this failure version doesnot have the s word in it";
        String falsePositive = "this version is invalid but still has success in it";
        Pattern pattern = Pattern.compile("^((?!INVALID|FAIL).)*$", Pattern.CASE_INSENSITIVE);

        Matcher successMatcher = pattern.matcher(success);
        if(successMatcher.find()){
            System.out.println("Success Matches");
        }
        Matcher rejectMatcher = pattern.matcher(reject);
        if(rejectMatcher.find()){
            System.out.println("Reject Matches");
        }
        Matcher falsePosMatcher = pattern.matcher(falsePositive);
        if(falsePosMatcher.find()){
            System.out.println("PseudoSuccess Matches");
        }
    }
}
java正则表达式检查器与PCRE有何不同

    String success = "this version has success in it";
    String reject = "this failure version doesnot have the s word in it";
    String falsePositive = "this version is invalid but still has success in it";
    Pattern pattern = Pattern.compile("(INVALID|FAIL)", Pattern.CASE_INSENSITIVE);

    Matcher successMatcher = pattern.matcher(success);
    if(successMatcher.matches()==false){
        System.out.println("Success Matches");
    }
    Matcher rejectMatcher = pattern.matcher(reject);
    if(rejectMatcher.find()){
        System.out.println("Reject Matches");
    }
    Matcher falsePosMatcher = pattern.matcher(falsePositive);
    if(falsePosMatcher.find()){
        System.out.println("PseudoSuccess Matches");
    }
使用上述程序进行了尝试,得到了如下输出:

成功匹配

拒绝比赛

伪成功匹配


这就是您所期望的输出吗?

在对代码进行了一些尝试之后(感谢Anubhava的模式),我需要阅读这里的内容

^(?。*?(无效|失败)).$


然而,我对我先前的模式有怀疑。请阅读关于我解释疑问的问题的评论。

即使是您的regex101演示也没有找到任何匹配项。至于方言差异,有一个很好的概述(但您的问题不在于此)。这里是一个不包含无效或失败的字符串的匹配项—失败的字符串不应匹配—此失败版本在itI中没有s字。这在PCRE或JavaNo中表现相同。这不是输出。我正在尝试匹配不包含无效或失败的字符串。如果在注释中使用3个链接,您将看到我想要的结果。代码中的matches()也必须是find()。两者之间有一个区别,这与我向您建议的非常相似,您评论说它在Java中不起作用。