Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 将精确字符串与regexp匹配_Java_Regex - Fatal编程技术网

Java 将精确字符串与regexp匹配

Java 将精确字符串与regexp匹配,java,regex,Java,Regex,我有以下字符串: CLASSIC STF CLASSIC 我使用regexp来匹配字符串 Pattern p = Pattern.compile("^CLASSIC(\\s*)$", Pattern.CASE_INSENSITIVE); 经典STF也在展出。 我使用m.find 怎么可能只显示CLASSIC而不显示CLASSIC STF 感谢您的帮助。如果您使用Matcher.find,则表达式CLASSIC\s*将匹配CLASSIC STF。 但是,Matcher.matches将返回f

我有以下字符串:

CLASSIC STF
CLASSIC
我使用regexp来匹配字符串

Pattern p = Pattern.compile("^CLASSIC(\\s*)$", Pattern.CASE_INSENSITIVE); 
经典STF也在展出。 我使用m.find 怎么可能只显示CLASSIC而不显示CLASSIC STF

感谢您的帮助。

如果您使用Matcher.find,则表达式CLASSIC\s*将匹配CLASSIC STF。 但是,Matcher.matches将返回false,因为它需要表达式匹配整个输入

要使Matcher.find执行相同的操作,请将表达式更改为^CLASSIC\s*$,如reto所述。

如果使用Matcher.find,则表达式CLASSIC\s*将与CLASSIC STF匹配。 但是,Matcher.matches将返回false,因为它需要表达式匹配整个输入

要使Matcher.find执行相同的操作,请将表达式更改为^CLASSIC\s*$,如reto所述。

默认情况下,^和$match分别对应整个输入字符串的开头和结尾,忽略任何换行符。我希望你的表达式与你提到的字符串不匹配。事实上:

字符串模式=^CLASSIC\\s*$; 字符串输入=经典STF%n经典; Pattern p=Pattern.compilepattern,Pattern.CASE_不区分大小写; 匹配器m=p.matcherString.formatinput; 而m.find{ System.out.printlnm.group; } 打印没有结果

如果希望“^”和“$”匹配字符串中所有行的开头和结尾,则应启用多行模式。通过将上面的第3行替换为Pattern p=Pattern.compilepattern,Pattern.CASE\u不区分大小写+Pattern.MULTILINE;。当我这样做时,我得到一个结果,即:经典

您还问为什么经典STF不匹配。让我们把你的模式分解一下,看看原因。图案上写着:匹配任何

从一行的开头开始~^ 以C开头,然后是L、a、S、S、I和C~经典 之后跟随0个或多个空格字符~\s* 然后我们看到一行结束~$ 在经典STF步骤3中匹配空格后,我们将看到一个字符S。这与步骤4结尾的行不匹配,因此我们无法匹配正则表达式

请注意,正则表达式中的括号不是必需的。你可以把它们排除在外

这是非常详细的。读一下可能会有帮助

编辑:

如果要使用正则表达式检查字符串/行是否包含单词CLASSIC,那么我建议使用正则表达式\bCLASSIC\b。如果您想查看字符串是否以单词CLASSIC开头,那么我会在默认情况下对整个输入字符串的开头和结尾分别使用^CLASSIC\b.

,忽略任何换行符。我希望你的表达式与你提到的字符串不匹配。事实上:

字符串模式=^CLASSIC\\s*$; 字符串输入=经典STF%n经典; Pattern p=Pattern.compilepattern,Pattern.CASE_不区分大小写; 匹配器m=p.matcherString.formatinput; 而m.find{ System.out.printlnm.group; } 打印没有结果

如果希望“^”和“$”匹配字符串中所有行的开头和结尾,则应启用多行模式。通过将上面的第3行替换为Pattern p=Pattern.compilepattern,Pattern.CASE\u不区分大小写+Pattern.MULTILINE;。当我这样做时,我得到一个结果,即:经典

您还问为什么经典STF不匹配。让我们把你的模式分解一下,看看原因。图案上写着:匹配任何

从一行的开头开始~^ 以C开头,然后是L、a、S、S、I和C~经典 之后跟随0个或多个空格字符~\s* 然后我们看到一行结束~$ 在经典STF步骤3中匹配空格后,我们将看到一个字符S。这与步骤4结尾的行不匹配,因此我们无法匹配正则表达式

请注意,正则表达式中的括号不是必需的。你可以把它们排除在外

这是非常详细的。读一下可能会有帮助

编辑:


如果要使用正则表达式检查字符串/行是否包含单词CLASSIC,那么我建议使用正则表达式\bCLASSIC\b。如果您想查看字符串是否以单词CLASSIC开头,那么我会使用^CLASSIC\b.

我想知道这是否有帮助: 练习=经典STF,经典
grep^CLASSIC[:space:]STF]?,练习

我想知道这是否有帮助: 练习=经典STF,经典
grep^CLASSIC[[:space:]STF]?,practice

你看过使用$and/or^的解决方案吗?@reto-yup我看过。你看过使用$and/or^的解决方案吗?@reto-yup我看过。我相信这个答案是不正确的。或者至少我不明白。CLASSIC\s*将不匹配CLASSIC STF它将只匹配前8个字符,因此开头语句不正确\s匹配whitspace字符。@这取决于您如何定义匹配:如果使用Matcher.matches,那么您的语句是正确的,因为整个输入都必须匹配。但是,如果您使用的是Matcher.find CLASSIC\s*将在CLASSIC STF中找到,因为即使CLASSIC本身也会匹配。通常,正则表达式匹配任何子字符串,即最常见的形式是wh
好吧,我明白你的意思。我想我会说Matcher.find会匹配经典STF的子字符串,但不会匹配字符串本身。在我看来,后者会产生误导。无论如何,谢谢你的澄清。我相信这个答案是错误的。或者至少我不明白。CLASSIC\s*将不匹配CLASSIC STF它将只匹配前8个字符,因此开头语句不正确\s匹配whitspace字符。@这取决于您如何定义匹配:如果使用Matcher.matches,那么您的语句是正确的,因为整个输入都必须匹配。但是,如果您使用的是Matcher.find CLASSIC\s*将在CLASSIC STF中找到,因为即使CLASSIC本身也会匹配。通常,正则表达式匹配任何子字符串,即最常见的形式是find所做的。好的,我明白你的意思。我想我会说Matcher.find会匹配经典STF的子字符串,但不会匹配字符串本身。在我看来,后者会产生误导。无论如何,谢谢你的澄清。