【问题标题】:java regex escape sequencesjava 正则表达式转义序列
【发布时间】:2015-05-15 14:29:50
【问题描述】:

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

Pattern.compile("this regex");

不过,我也可以这样做:

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

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

【问题讨论】:

    标签: java regex


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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2013-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-11
          • 1970-01-01
          • 1970-01-01
          • 2013-01-04
          • 1970-01-01
          相关资源
          最近更新 更多