String
を分割しようとしています。簡単な例が機能します:
groovy:000> print "abc,def".split(",");
[abc, def]===> null
groovy:000>
しかし、コンマの代わりに、パイプで分割する必要があり、望ましい結果が得られません。
groovy:000> print "abc|def".split("|");
[, a, b, c, |, d, e, f]===> null
groovy:000>
もちろん、私の最初の選択はパイプから切り替えることです(|
)からカンマ(,
)区切り文字として。
しかし、私は興味をそそられました。なぜこれが機能しないのですか?パイプのエスケープ(\|
)は役に立たないようです:
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>
\\|
で分割する必要があります。
パイプは、正規表現では特別な意味があるため、エスケープする必要があります。ただし、引用符を使用する場合は、スラッシュもエスケープする必要があります。基本的には、2つのオプションがあります。
asserts "abc|def".split("\\|") == ['abc','def']
または/
余分なエスケープを回避するための文字列区切り文字として
asserts "abc|def".split(/\|/) == ['abc','def']