Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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,我正在尝试以下代码,它打印错误。 我希望这是真的。 此外,Pattern.Compile()statemenet提供了一个警告“冗余转义字符”。 有人能帮我解释为什么这不是真的,为什么我会看到警告 public static void main(String[] args) { String s = "\\n"; System.out.println(s); Pattern p = Pattern.compile("\\\n"); Matcher mm = p.

我正在尝试以下代码,它打印错误。 我希望这是真的。 此外,Pattern.Compile()statemenet提供了一个警告“冗余转义字符”。 有人能帮我解释为什么这不是真的,为什么我会看到警告

public static void main(String[] args) {
    String s = "\\n";
    System.out.println(s);

    Pattern p = Pattern.compile("\\\n");
    Matcher mm = p.matcher(s);
    System.out.println(mm.matches());
}
s=“\\n”
表示为变量
s
分配反斜杠和
n
,它包含两个字符的序列,
\
n

Pattern.compile(\\\n”)
表示定义与换行符匹配的正则表达式模式
\n
。因此,此模式与变量
s
中的字符串不匹配


冗余转义警告与您在C字符串文本中使用三个反斜杠有关:两个反斜杠定义了一个文本反斜杠,第三个是冗余的,即有一个文本
\
,然后是一个换行转义序列
“\n”
,这意味着文本反斜杠(用两个反斜杠定义)是多余的,可以删除。

您的源s有两个字符,
\'\'
'n'
,如果您的意思是
\
后跟一个换行符,那么它应该是
“\\\n”

模式有两个字符“\”和“\n”(换行符),不需要转义符,因此会发出警告。如果您的意思是\后跟换行符,则它应该是“”(两次\对regex进行转义,然后\n)


因为
“\\n”
计算为反斜杠
\\\
和字母
n
,而
“\\\n”
计算为反斜杠
\\
,然后,Java源代码中字符串文本内的换行
\n

反斜杠将按照Java代码的要求进行解释™ 作为Unicode转义(第3.3节)或其他字符转义(第3.10.6节)的语言规范,因此有必要在表示正则表达式的字符串文本中使用双反斜杠,以防止它们被Java字节码编译器解释。字符串文本“\b”例如,当解释为正则表达式时,匹配单个退格字符,而“
\\b
”匹配单词边界


请参阅:

\\n表示\和n个字符。模式中的\\\n也应表示:\\n,这意味着它应匹配\和n。要匹配带有反斜杠的字符串,然后是
n
,您需要
string pattern=“\\\\n”
。要匹配反斜杠,字符串文本中需要4个反斜杠,表示传递给正则表达式引擎的字符串中的2个反斜杠。因此,请让我知道这是否回答了您的问题。如果没有回答,请共享您的代码或解释实际情况。\\n!=\\\n-您正在将字母“n”与换行符“\n”进行比较
    String s = "\\\n";
    System.out.println(s);

    Pattern p = Pattern.compile("\\\\\n");

    Matcher mm = p.matcher(s);
    System.out.println(mm.matches());