繁体   English   中英

Java正则表达式转义序列

[英]java regex escape sequences

我想知道Java中的正则表达式,却偶然发现使用反斜杠。 例如,如果我想在文本中查找“ this regex”一词的出现,则可以执行以下操作:

Pattern.compile("this regex");

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

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

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

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

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

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

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

区别在于\\ s表示空格字符,它可以不仅仅是空格。 它可以是制表符,换行符,换行符,仅举几例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM