J'essaie de diviser un String
. Des exemples simples fonctionnent:
groovy:000> print "abc,def".split(",");
[abc, def]===> null
groovy:000>
Mais au lieu d'une virgule, je dois le diviser sur des tuyaux, et je n'obtiens pas le résultat souhaité:
groovy:000> print "abc|def".split("|");
[, a, b, c, |, d, e, f]===> null
groovy:000>
Donc, bien sûr, mon premier choix serait de passer des tuyaux (|
) en virgules (,
) comme délimiteurs.
Mais maintenant, je suis intrigué: pourquoi cela ne fonctionne-t-il pas? Échapper au tuyau (\|
) ne semble pas aider:
groovy:000> print "abc|def".split("\|");
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_parse: 1: unexpected char: '\' @ line 1, column 24.
print "abcdef".split("\|");
^
1 error
|
at Java_lang_Runnable$run.call (Unknown Source)
groovy:000>
Vous devez vous séparer sur \\|
.
Vous devez échapper à la pipe car, en effet, elle a une signification particulière dans l'expression régulière. Cependant, si vous utilisez des guillemets, vous devez également échapper à la barre oblique. Fondamentalement, deux options alors:
asserts "abc|def".split("\\|") == ['abc','def']
ou en utilisant le /
comme délimiteur de chaîne pour éviter des échappements supplémentaires
asserts "abc|def".split(/\|/) == ['abc','def']