Groovy/Java括号上的拆分字符串;";

Groovy/Java括号上的拆分字符串;";,java,groovy,escaping,pattern-matching,Java,Groovy,Escaping,Pattern Matching,我正在尝试执行类似于以下内容的拆分: println "Hello World(1)".split("W"); 输出: [Hello , orld(1)] 我要执行此拆分: println "Hello World(1)".split("("); 但我明白了: Caught: java.util.regex.PatternSyntaxException: Unclosed group near index 1 ( 有什么方法可以跳过这个括号吗?非常感谢您的帮助。split方法采用正则表达

我正在尝试执行类似于以下内容的拆分:

println "Hello World(1)".split("W");
输出:

[Hello , orld(1)]
我要执行此拆分:

println "Hello World(1)".split("(");
但我明白了:

Caught: java.util.regex.PatternSyntaxException: Unclosed group near index 1 (

有什么方法可以跳过这个括号吗?非常感谢您的帮助。

split方法采用正则表达式模式

如果要在“仅一个常规字符串”上拆分,可以使用
Pattern.quote
首先引用字符串:

println "Hello World(1)".split(Pattern.quote("("))

必须正确转义括号字符

println "Hello World(1)".split("\\(")

在使用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("\\(");
或者,您也可以通过名为quote的类模式的java内置函数完成所有工作:


你需要像这样转义它。
\\(
转义不起作用@Ant对不起,双回斜杠你可以在
“\\(“
)上拆分,它首先转义
\(
\(
),然后正则表达式引擎转义
\(
到一个文字括号这很有趣。.我没有考虑使用Pattern.quote()在这种情况下,回答得好Jon@jedyobidan:嗯,这正是
模式所能做到的。引用
就意味着你不需要手动操作。。。
println "Hello World(1)".split("\\(");
println "Hello World(1)".split(Pattern.quote("("));