Java正则表达式-试图创建特定的模式,但我';我不太清楚该怎么办
在我的Java应用程序中,我试图指定一个模式,该模式将匹配不是由大写字母、小写字母或破折号组成的任何内容。所以我希望它匹配任何不包含A-Z、A-Z或“-”的东西。我对使用正则表达式还不熟悉,所以我只是想看看我是否已经接近正确的表达方式。这就是我所拥有的:Java正则表达式-试图创建特定的模式,但我';我不太清楚该怎么办,java,regex,Java,Regex,在我的Java应用程序中,我试图指定一个模式,该模式将匹配不是由大写字母、小写字母或破折号组成的任何内容。所以我希望它匹配任何不包含A-Z、A-Z或“-”的东西。我对使用正则表达式还不熟悉,所以我只是想看看我是否已经接近正确的表达方式。这就是我所拥有的: Pattern.compile("[^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编译器。要匹配后跟连字符的文字反斜杠,必须使用“\\\\-”。在任何情况下,如果连字符是字符类中列出的最后一个字符,则不必转义连字符,如示例所示。