Java正则表达式中的EOL

Java正则表达式中的EOL,java,regex,Java,Regex,为什么在Java的正则表达式库中,在下一个命令中可以找到EOL Matcher matcher = Pattern.compile( "[\\\\r\\\\n$]+" ).matcher( " where " ); if ( matcher.find() ) { // found reaction } 这不是一个新行正则表达式。您正在逐字匹配下列字符之一1次或多次:\、r、\、n或$。在where中,有一个r,因此该模式可以在字符串中找到 新行regex是\r |\n |\r\n。在JAVA中

为什么在Java的正则表达式库中,在下一个命令中可以找到EOL

Matcher matcher = Pattern.compile( "[\\\\r\\\\n$]+" ).matcher( " where " );
if ( matcher.find() )
{
// found reaction
}

这不是一个新行正则表达式。您正在逐字匹配下列字符之一1次或多次:
\
r
\
n
$
。在
where
中,有一个
r
,因此该模式可以在字符串中找到

新行regex是
\r |\n |\r\n
。在JAVA中,需要避开反斜杠,因此将出现两个问题:

  • 正则表达式不正确,您只需要一个转义序列。模式是
    \r
    \n
    ,而不是
    \\r
    \\n
    。在Java中,您需要转义它们一次,因此模式是
    \\r
    \\n
  • 您正在搜索的字符串(
    “其中”
    )不包含任何回车符+换行符(仅\r)
  • 这将找到回车+换行符:

    Matcher matcher = Pattern.compile( "[\\r\\n$]+" ).matcher( " where \n" );
    if ( matcher.find() ){
        System.out.println("found");
    }
    

    问题是什么?