【问题标题】:Java Regular Expression - how to use backslash [duplicate]Java正则表达式-如何使用反斜杠[重复]
【发布时间】:2016-03-18 19:29:54
【问题描述】:

我真的很困惑如何逃跑。有时我只需要添加一个反斜杠,但有时我需要添加双反斜杠,例如"\\."。 谁能告诉我为什么?

还有,谁能给我解释一下

  • String.split("\t"),
  • String.split("\\t"),
  • String.split("\\\t"),
  • String.split("\\\\t")?

【问题讨论】:

  • 您可以直接编辑您的问题,而不是添加评论并留下不正确的文字。
  • 尽可能多地添加反斜杠,直到它起作用。

标签: java regex


【解决方案1】:

反斜杠是字符串文字中的特殊字符 - 我们可以使用它来创建\n 或转义",如\"

但反斜杠在正则表达式引擎中也很特殊——例如我们可以使用它来使用默认字符类,如\w\d\s

因此,如果您想创建 表示 正则表达式/文本的字符串,例如 \w,则需要将其写为 "\\w"

如果您想编写表示\ 文字的正则表达式,则表示此类正则表达式的文本需要类似于\\,这意味着表示此类文本的字符串需要编写为"\\\\"
换句话说,我们需要两次转义反斜杠:
- 一次在正则表达式\\
- 一次在字符串"\\\\" 中。

如果您想传递到将代表制表符的正则表达式引擎文字,那么您根本不需要转义反斜杠。 Java 会将"\t" 字符串理解为表示制表符的字符串,您可以毫无问题地将此类字符串传递给您的正则表达式引擎。

为了我们的舒适,Java 中的正则表达式引擎解释表示\t(也称为\r\n)的文本与字符串文字解释"\t" 的方式相同。换句话说,我们可以将表示\ 字符和t 字符的文本传递给正则表达式引擎,并确保它将被解释为制表符的表示。

因此split("\t")split("\\t") 之类的代码将尝试在选项卡上拆分。

split("\\\\t") 这样的代码将尝试拆分文本,而不是制表符,而是\ 字符,后跟t。发生这种情况是因为"\\\\" 解释为代表文本\\,正则表达式引擎将其视为转义\(因此它被视为文字)。

【讨论】:

  • 我正在解释String.split("\\\t")。看起来正则表达式引擎允许文本\[tab] 代表[tab]。我不知道为什么会这样。我希望这里有异常,因为这样的表达很可能是错误的结果。
  • 非常感谢。你的回答解决了我的困惑。但是我还有一个问题,String.split("\\a") 的结果是什么? “\\a”在正则表达式中表示“\a”,但是这个正则表达式代表什么?
  • Yes "\\a" 代表 \a 正则表达式(传递给正则表达式引擎的文本)并根据 Pattern 类文档 (docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) \a 代表“警报(铃)字符( '\u0007')".
  • 知道了!非常感谢!您的回答非常全面,非常有帮助。
猜你喜欢
  • 2017-07-10
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多