2012-07-08 13 views

risposta

5

Questo è in realtà due uscite in contesti diversi, a causa del fatto che l'argomento è un'espressione regolare come stringa.

L'[ deve essere preceduto da escape perché altrimenti avrebbe un significato speciale nell'espressione regolare. L'escape per l'espressione regolare lo renderebbe \[. Ma il \ deve essere sottoposto a escape in quanto ha un significato speciale in una stringa (per l'escape e per rappresentare i caratteri in base al valore numerico).

Può essere molto peggio, poiché il carattere \ viene utilizzato per l'escape in entrambi i contesti. Se si desidera dividere il carattere \, è necessario sfuggire a esso (\\) per l'utilizzo di espressioni regolari, ma in questo caso si hanno due caratteri \, che devono essere entrambi sottoposti a escape nel contesto stringa. L'utilizzo nella stringa originale siete scissione avrebbe bisogno anche la fuga se si sta scrivendo come una costante, in modo analogo la scissione sarà simile:

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

Le varie versioni di Groovy dare risultati diversi.

Per Groovy 1,1-beta-1 e poi,

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

afferma OK, ma Groovy 1.0 e prima dà un errore di asserzione.

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

afferma OK per tutte le versioni da 1,1-beta-1 in poi, Groovy 1.0-JSR-01 1.0 dà un errore di asserzione, mentre Groovy 1.0-beta-10 e prima dà un errore lessicale.

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

per tutte le versioni di Groovy da 1.0-beta-5, e beta-3, stampe

hello 
world 

ma 1.0-beta-4 stampe

[.] 
[.] 
hello 
world 
Problemi correlati