Java 为什么';t Pattern.matches(";[a*mn]";,";aaaa";)是否返回true?要获得所需的输出,正确的代码应该是什么?

Java 为什么';t Pattern.matches(";[a*mn]";,";aaaa";)是否返回true?要获得所需的输出,正确的代码应该是什么?,java,Java,我想创建一个模式,其中所需的字符串应该是a的倍数,包括null,即a*,或者应该是单个m或单个n。但是下面的代码没有给出所需的输出 class Solution { public static void main(String args[]) { System.out.println(Pattern.matches("[a*mn]", "aaaa")); } } 字符类([])中的*只是一个*,而不是一个量词 我想创建一个

我想创建一个模式,其中所需的字符串应该是a的倍数,包括null,即a*,或者应该是单个m或单个n。但是下面的代码没有给出所需的输出

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

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

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

您需要一个备选方案(
|
):
a*.[mn]

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


…虽然很明显,如果您确实在重复使用该模式,您会希望将其编译一次并重用结果。
*
在字符类(
[]
)中只是一个
*
,而不是一个量词

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

您需要一个备选方案(
|
):
a*.[mn]

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

…虽然很明显,如果您确实在重复使用该模式,您会希望编译它一次并重用结果。

试试看

Pattern.matches(((a*)|m | n),“”)//true,匹配第一组
Pattern.matches(“(a*)|m | n”,“a”)//true,匹配第一组
Pattern.matches(“(a*)|m | n”,“aaaa”)//true,匹配第一组
Pattern.matches(“(a*)|m | n”,“m”)//true,match`n`
Pattern.matches(“(a*)|m | n”,“n”)//true,match`m`
Pattern.matches(“(a*)|m | n”,“man”)//false
Pattern.matches(“(a*)|m | n”,“mn”)//false
试试看

Pattern.matches(((a*)|m | n),“”)//true,匹配第一组
Pattern.matches(“(a*)|m | n”,“a”)//true,匹配第一组
Pattern.matches(“(a*)|m | n”,“aaaa”)//true,匹配第一组
Pattern.matches(“(a*)|m | n”,“m”)//true,match`n`
Pattern.matches(“(a*)|m | n”,“n”)//true,match`m`
Pattern.matches(“(a*)|m | n”,“man”)//false
Pattern.matches(“(a*)|m | n”,“mn”)//false
在[]中,“”不是一个量词,因此如果正则表达式中存在一个字符,您将得到一个true。因此,如果字符串为“a”、“m”、“n”,则结果将为true。 其余的将导致错误。 您的正则表达式应该是:

([aa*]*|[mn])

仅当输入多个“a”,包括“a*”或单个“m”或“n”时,才为真。 通过以下示例进行检查:

System.out.println("[aa*]*|[mn]","m");
System.out.println("[aa*]*|[mn]","aaaaa");
System.out.println("[aa*]*|[mn]","a*a*");
在[]中,“”不是量词,因此如果正则表达式中存在一个字符,则会得到一个true。因此,如果字符串为“a”、“m”或“n”,则结果将为true。 其余的将导致错误。 您的正则表达式应该是:

([aa*]*|[mn])

仅当输入多个“a”,包括“a*”或单个“m”或“n”时,才为真。 通过以下示例进行检查:

System.out.println("[aa*]*|[mn]","m");
System.out.println("[aa*]*|[mn]","aaaaa");
System.out.println("[aa*]*|[mn]","a*a*");

*
在方括号内使用时没有量词请发送更多准确显示您所需内容的示例。“aaaaa”或“aa”或“m”或“n”应返回true,但“aaam”或“aaan”或“mmmm”或“nnnn”将返回false。只有a允许有倍数。
*
在方括号内使用时不是量词。请发送更多示例,准确显示您想要的内容。“aaaaaaa”或“aa”或“m”或“n”应返回true,但“aaam”或“aaan”或“mmmm”或“nnnn”将返回false。只允许a有倍数。在java正则表达式中“|”是什么意思?与其他任何地方一样:逻辑OR@HARSHITDANG-正如我上面所说的:替代(例如,两个替代中的一个,“或”),参见JavaDoc。上面的正则表达式的字面意思正是你写的:“a的倍数,包括空值,例如a*或…一个m或一个n”*。(我假设“null”实际上是指“空字符串”。)在java正则表达式中“|”是什么意思?与其他任何地方一样:逻辑OR@HARSHITDANG-正如我上面所说的:替代(例如,两个替代中的一个,“或”),参见JavaDoc。上面的正则表达式的字面意思正是你写的:“a的倍数,包括空值,例如a*或…一个m或一个n”*。(我假设“null”的意思是“空字符串”。)