Java Regular Expression - 如何使用反斜杠

时间:2016-03-18 19:29:55

标签: java regex

我真的很困惑如何逃避。有时候我只需要加一个反斜杠,但有时我需要加上像"\\."这样的双反斜杠。 有谁可以告诉我为什么?

另外,任何人都可以给我一个差异的解释

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

1 个答案:

答案 0 :(得分:3)

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

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

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

如果要编写代表\文字的正则表达式,则表示此类正则表达式的文本需要看起来像\\,这意味着表示此类文本的字符串需要写为"\\\\"。<登记/> 换句话说,我们需要两次反斜杠:
- 一次进入正则表达式\\
- 一次在字符串"\\\\"中。

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

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

因此split("\t")split("\\t")等代码会尝试在标签上进行拆分。

split("\\\\t")之类的代码会尝试拆分不在制表符上的文字,而是在\字符后跟t。之所以会发生这种情况,是因为"\\\\"代表了正则表达式\\,正则表达式引擎将其视为已转义\(因此将其视为文字)。