Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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正则表达式-试图创建特定的模式,但我';我不太清楚该怎么办_Java_Regex - Fatal编程技术网

Java正则表达式-试图创建特定的模式,但我';我不太清楚该怎么办

Java正则表达式-试图创建特定的模式,但我';我不太清楚该怎么办,java,regex,Java,Regex,在我的Java应用程序中,我试图指定一个模式,该模式将匹配不是由大写字母、小写字母或破折号组成的任何内容。所以我希望它匹配任何不包含A-Z、A-Z或“-”的东西。我对使用正则表达式还不熟悉,所以我只是想看看我是否已经接近正确的表达方式。这就是我所拥有的: Pattern.compile("[^A-Z]&&[^a-z]&&[^\\-]"); 我甚至不确定我是否需要破折号的转义字符,或者我是否需要,是否应该是两个反斜杠而不是一个。我也不确定整体的格式。谢谢你的帮助。

在我的Java应用程序中,我试图指定一个模式,该模式将匹配不是由大写字母、小写字母或破折号组成的任何内容。所以我希望它匹配任何不包含A-Z、A-Z或“-”的东西。我对使用正则表达式还不熟悉,所以我只是想看看我是否已经接近正确的表达方式。这就是我所拥有的:

Pattern.compile("[^A-Z]&&[^a-z]&&[^\\-]");
我甚至不确定我是否需要破折号的转义字符,或者我是否需要,是否应该是两个反斜杠而不是一个。我也不确定整体的格式。谢谢你的帮助。

你不需要说“和不是”,你可以把它们都放在一起:

Pattern.compile("[^A-Za-z\-]");
关于转义,单个反斜杠
\
会立即转义后面的字符,因此
\-
会给您一个文本
-
字符,
\
会给您一个文本
\
字符。在您的原始帖子中,
\\-
会转义反斜杠,但不会转义连字符,因此您最终会匹配“not backslash or hyphen”。

您不需要说“AND not”,您可以将它们全部放在一起:

Pattern.compile("[^A-Za-z\-]");

关于转义,单个反斜杠
\
会立即转义后面的字符,因此
\-
会给您一个文本
-
字符,
\
会给您一个文本
\
字符。在您原来的帖子中,
\\-
转义反斜杠,但不转义连字符,因此您最终匹配的是“非反斜杠或连字符”。

基于@Joe的答案:

Pattern.compile("[^A-Za-z\\-]");

但是你需要使用双重反冲,因为你需要逃避
\
,这是在@Joe的答案的基础上逃避
-
的:

Pattern.compile("[^A-Za-z\\-]");

但是您需要使用双齿隙,因为您需要转义
\
,这是转义由字符组成的
-

,这些字符都不是大写、小写或破折号?或者由字符组成,其中至少有一个不是大写、小写或破折号。如果不确定,请尝试。由字符组成,但没有一个是大写、小写或破折号?或者由字符组成,其中至少有一个不是大写、小写或破折号。如果您不确定,请尝试一下。您忘记了Java编译器。字符串literal
“\\-”
包含一个转义反斜杠,后跟一个连字符。编译Java源代码时,它将成为字符串
\-
,正则表达式编译器(
Pattern.compile()
)将其视为转义连字符。字符串literal
“\-”
将无法通过Java编译器。要匹配后跟连字符的文字反斜杠,必须使用“\\\\-”。在任何情况下,如果连字符是字符类中列出的最后一个字符,则不必转义连字符,如您的示例所示。您忘记了Java编译器。字符串literal
“\\-”
包含一个转义反斜杠,后跟一个连字符。编译Java源代码时,它将成为字符串
\-
,正则表达式编译器(
Pattern.compile()
)将其视为转义连字符。字符串literal
“\-”
将无法通过Java编译器。要匹配后跟连字符的文字反斜杠,必须使用“\\\\-”。在任何情况下,如果连字符是字符类中列出的最后一个字符,则不必转义连字符,如示例所示。