我想知道Java中的正则表达式,并偶然发现使用反斜杠。例如,如果我想在文本中查找“this regex”一词的出现,我会做这样的事情:
Pattern.compile("this regex");
尽管如此,我也可以这样做:
Pattern.compile("this\\sregex");
我的问题是:他们俩之间有什么区别?为什么我必须两次输入反斜杠,我的意思是,为什么不是Java中的转义序列?提前谢谢!
答案 0 :(得分:2)
\s
表示任何空格字符,包括制表符,换行符和回车符。\
来转义特殊字符。要将字符\
放入字符串文字中,您需要编写"\\"
。然而,正则表达式模式也使用\
作为它们的转义字符,并且将它放入字符串文字的方法是使用两个,因为它经历了两个单独的转义过程。例如,如果您从纯文本文件中读取正则表达式模式,则不需要双重转义。答案 1 :(得分:1)
您需要两个反斜杠的原因是,当您在Java代码中输入正则表达式字符串时,您实际上正在处理两个解析器:
Pattern.compile
时传递给正则表达式解析。因此,当您输入"this\\sregex"
时,它将由Java编译器转换为Java字符串"this\sregex"
。然后,当您使用字符串调用Pattern.compile
时,反斜杠将被正则表达式编译器解释为特殊字符。
答案 2 :(得分:0)
不同之处在于\ s表示空格字符,它可能不仅仅是一个空格。它可以是制表符,换行符,换行符等等。