括弧 "("でのGroovy / Java分割文字列
次のような分割を実行しようとしています:
println "Hello World(1)".split("W");
出力:
[Hello , orld(1)]
この分割を実行したい:
println "Hello World(1)".split("(");
しかし、私は見る:
Caught: Java.util.regex.PatternSyntaxException: Unclosed group near index 1 (
この括弧をエスケープする方法はありますか?どんな助けも大歓迎です。
println "Hello World(1)".split("\\(");
split
メソッドは、正規表現パターンを取ります。
「通常の文字列だけ」で分割する場合は、Pattern.quote
最初に文字列を引用します。
println "Hello World(1)".split(Pattern.quote("("))
Groovyのネイティブ正規表現構文を使用する場合、単一のエスケープを使用することもできます。
assert "Hello World(1)".split(/\(/) == ["Hello World", "1)"]
splitは正規表現を受け入れるだけなので、エスケープ文字として渡す必要があります。このためには、その前にバックスラッシュを追加する必要があります
\(
ただし、上記のような有効なエスケープ文字として解析されるため、上記のコンパイルエラーがあります。
\t Tab
\n New Line or Line Feed
\r Carriage Return
そのため、2つのバックスラッシュで意味のない文字(括弧など)を渡す必要があります。
\\(
最後に:
println "Hello World(1)".split("\\(");
または、Javaクラスの組み込み関数パターン名前付き引用:
println "Hello World(1)".split(Pattern.quote("("));
ブラケット文字を適切にエスケープする必要があります
println "Hello World(1)".split("\\(")