2012-07-08 11 views

Respuesta

5

Esto es en realidad dos escapes en diferentes contextos, debido al hecho de que el argumento es una expresión regular representada como una cadena.

El [ tiene que ser escapado porque de lo contrario tendría un significado especial en la expresión regular. El escape para la expresión regular lo haría \[. Pero entonces el \ tiene que ser escapado ya que tiene un significado especial en una cadena (para escaparse y para representar caracteres por valor numérico).

Puede ser mucho peor, ya que el carácter \ se usa para escapar en ambos contextos. Si desea dividir por el carácter \, debe escapar (\\) para el uso de expresiones regulares, pero luego tiene dos caracteres \, que deben escaparse en contexto de cadena. El uso de la cadena original va a dividir también necesitaría la fuga si usted está escribiendo como una constante, por lo que la división análoga se vería así:

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

Las diferentes versiones del maravilloso dar resultados diferentes.

Para Groovy 1,1-beta-1 y en adelante,

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

afirma OK, pero Groovy 1.0 y antes da un error afirmación.

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

afirma OK para todas las versiones de 1,1-beta-1 en adelante, maravilloso 1,0-JSR-01 a 1,0 da un error afirmación, mientras Groovy 1,0-beta-10 y antes da un error de léxico.

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

para todas las versiones de Groovy de 1,0-beta-5, y beta-3, grabados

hello 
world 

pero 1,0-beta-4 grabados

[.] 
[.] 
hello 
world 
Cuestiones relacionadas