Groovy:为什么我需要双重转义方括号?

Gil*_*laH 9 groovy

为什么这不起作用?

"hello[world".split("\[")
Run Code Online (Sandbox Code Playgroud)

这样做:

"hello[world".split("\\[")
Run Code Online (Sandbox Code Playgroud)

Don*_*oby 9

这实际上是在不同上下文中的两个转义,因为参数是表示为字符串的正则表达式.

[来转义,否则它会在正则表达式特殊的意义.正则表达式的转义会成功\[.但是\必须进行转义,因为它在字符串中具有特殊含义(用于转义和通过数值表示字符).

它可能更糟糕,因为\角色在两种情况下都用于逃避.如果你想按\字符分割,你必须\\为正则表达式用法转义它(),但是你有两个\字符,它们都必须在字符串上下文中转义.如果您将其作为常量编写,则您要拆分的原始字符串中的用法也需要转义,因此类似的拆分看起来像:

"hello\\world".split("\\\\")
Run Code Online (Sandbox Code Playgroud)