java正则表达式转义序列

时间:2015-05-15 14:29:50

标签: java regex

我想知道Java中的正则表达式,并偶然发现使用反斜杠。例如,如果我想在文本中查找“this regex”一词的出现,我会做这样的事情:

Pattern.compile("this regex");

尽管如此,我也可以这样做:

Pattern.compile("this\\sregex");

我的问题是:他们俩之间有什么区别?为什么我必须两次输入反斜杠,我的意思是,为什么不是Java中的转义序列?提前谢谢!

3 个答案:

答案 0 :(得分:2)

  1. \s表示任何空格字符,包括制表符,换行符和回车符。
  2. Java字符串文字已使用\来转义特殊字符。要将字符\放入字符串文字中,您需要编写"\\"。然而,正则表达式模式也使用\作为它们的转义字符,并且将它放入字符串文字的方法是使用两个,因为它经历了两个单独的转义过程。例如,如果您从纯文本文件中读取正则表达式模式,则不需要双重转义。

答案 1 :(得分:1)

您需要两个反斜杠的原因是,当您在Java代码中输入正则表达式字符串时,您实际上正在处理两个解析器:

  • 第一个是Java编译器,它将您的字符串文字转换为Java字符串。
  • 第二个是正则表达式解析器,它在将正则表达式转换为Java字符串后解释你的正则表达式,然后在调用Pattern.compile时传递给正则表达式解析。

因此,当您输入"this\\sregex"时,它将由Java编译器转换为Java字符串"this\sregex"。然后,当您使用字符串调用Pattern.compile时,反斜杠将被正则表达式编译器解释为特殊字符。

答案 2 :(得分:0)

不同之处在于\ s表示空格字符,它可能不仅仅是一个空格。它可以是制表符,换行符,换行符等等。