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

  • 本文关键字:转义 方括号 Groovy groovy
  • 更新时间 :
  • 英文 :


为什么这不起作用?

"hello[world".split("[")

这确实:

"hello[world".split("\[")

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

必须对[进行转义,否则它将在正则表达式中具有特殊含义。 正则表达式的转义将使其[。 但是,必须对进行转义,因为它在字符串中具有特殊含义(用于转义和用数值表示字符)。

情况可能更糟,因为字符在两种情况下都用于转义。 如果要按字符拆分,则必须对正则表达式用法进行转义(\),但是您有两个字符,它们都必须在字符串上下文中进行转义。 如果要将其编写为常量,则要拆分的原始字符串中的用法也需要转义,因此类似的拆分如下所示:

"hello\world".split("\\")

不同版本的Groovy给出不同的结果。

对于 Groovy 1.1-BETA-1 及更高版本,

assert "hello[world".split("\[") == ["hello", "world"]

断言正常,但 Groovy 1.0 及更早版本给出断言错误。

assert "hello[world".split(/[/) == ["hello", "world"]

断言 OK 对于从 1.1-BETA-1 开始的所有版本,Groovy 1.0-jsr-01 到 1.0 给出断言错误,而 Groovy 1.0-beta-10 及更早版本给出词法错误。

"hello[world".split("\[").each{println it}

对于 1.0-beta-5 和 beta-3 的所有版本的 Groovy,打印

hello
world

但是 1.0-β-4 打印

[.]
[.]
hello
world

最新更新