理解Java中的正则表达式:split("\ t")vs split("\\ t") - 它们何时都可以工作,何时应该使用它们

pos*_*def 31 java regex split

我最近发现我在代码中没有正确使用正则表达式.给出了制表符分隔字符串的示例str,我一直在使用str.split("\t").现在我意识到这是错误的,并且正确匹配标签我应该使用str.split("\\t").

然而,我碰巧偶然发现了这个事实,因为我正在为其他东西寻找正则表达式.你看,错误的代码split("\t")在我的情况下工作得很好,现在我很困惑,为什么它可以工作,如果它是一个错误的方式来声明一个正则表达式匹配制表符.因此,问题是,为了实际理解如何在Java中处理正则表达式,而不是仅仅将代码复制到Eclipse中而不是真正关心其工作原理......

以类似的方式,我发现了一段不仅以制表符分隔而且以逗号分隔的文本.更清楚地说,我正在解析的制表符分隔列表有时包括"复合"项,它们看起来像:item1,item2,item3为了简单起见,我想将它们解析为单独的元素.在这种情况下,适当的正则表达式应该是:line.split("[\\t,]"),或者我也错在这里?

提前致谢,

Gum*_*mbo 41

使用时"\t",转义序列 \t由Java替换,字符为U + 0009.当使用"\\t",转义序列\\\\t通过Java的替换\,从而导致\t,然后由解释的正则表达式语法分析程序作为字符U + 0009.

因此两种符号都将被正确解释.这只是用相应的角色替换的问题.

  • @InsertNickHere - 实际上oracle引用告诉你在String中使用`\ t`.如果此字符串由文字给出,则需要加倍反斜杠,请参阅后续段落:http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html #bs但引用也告诉你可以使用`x`代表字符`x`,所以使用"\ t"或"\ u0009"是没有错的 (2认同)