我想创建一个模式,其中所需的字符串应该是包含null的倍数,即a *,或者应该是单个m或单个n。但是以下代码无法提供所需的输出。

class Solution {
            public static void main(String args[]) {
                System.out.println(Pattern.matches("[a*mn]", "aaaa"));
        }
}

最佳答案

字符类(*)中的[]只是一个*,而不是一个量词。


  我想创建一个模式,其中所需的字符串应该是包含null的倍数,即a *,或者应该是单个m或单个n。


为此,您需要一个替代(|):a*|[mn]

Pattern.matches("a*|[mn]", "aaaa")


Live example

import java.util.regex.Pattern;

class Example {
    public static void main (String[] args) throws java.lang.Exception {
        check("aaaa", true);
        check("a", true);
        check("", true);
        check("m", true);
        check("n", true);
        check("mn", false);
        check("q", false);
        check("nnnn", false);
    }
    private static void check(String text, boolean expect) {
        boolean result = Pattern.matches("a*|[mn]", text);
        System.out.println(
            (result ? "Match   " : "No match") +
            (result == expect ? " OK    " : " ERROR ") +
            ": " + text
        );
    }
}


...虽然很明显,如果您真的在重复使用该模式,则希望将其编译一次并重用结果。

关于java - 为什么Pattern.matches(“[a * mn]”,“aaaa”)返回true?什么是适当的代码才能获得所需的输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57345958/

10-10 13:20