Java 模式提取括号之间的文本

Java 模式提取括号之间的文本,java,regex,pattern-matching,Java,Regex,Pattern Matching,如何使用模式匹配或其他方法从“(“和”)提取字符串。例如,如果文本是 “你好(Java)” 那么,如何仅获取“Java”?请尝试以下方法: String x = "Hello (Java)"; Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x); while (m.find()) { System.out.println(m.group(1)); } 或 \\((.+?)\\)是什么意思

如何使用模式匹配或其他方法从
“(“
”)
提取字符串。例如,如果文本是

“你好(Java)”

那么,如何仅获取
“Java”

请尝试以下方法:

String x = "Hello (Java)";
Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x);
while (m.find()) {
    System.out.println(m.group(1));
}


\\((.+?)\\)
是什么意思


这个正则表达式模式将从
\\(
开始,它将匹配
,因为它是在regExp中保留的,所以我们需要转义这个字符,
\\)也是一样。
(.*)
将匹配任何零个或更多的字符,而且在
()
被认为是我们正在寻找的群体。

我知道这是三年前提出的,但对于任何有相同/类似问题的人(就像我一样),有比使用regex更简单的方法:

String result = StringUtils.substringBetween(str, "(", ")");
在您的示例中,
result
将作为“Java”返回。我建议使用StringUtils库进行各种(相对简单的)字符串操作;它可以自动处理空输入之类的事情,这非常方便

substringBetween()的文档:


此函数还有两个其他版本,具体取决于开始分隔符和结束分隔符是否相同,以及分隔符是否在目标字符串中多次出现。

可能从
indexOf
开始:到目前为止您尝试了什么?您希望嵌套括号中出现什么情况,例如“Hello(Foo和(Bar))”?对于具有多个方括号值的情况,例如“Hello(Foo)和(Bar)”?如何获取表达式[“1”、“5”、“7”]中的字符串。结果应该是“1”、“5”和“7”。我们应该像这样使用:
Pattern regex=Pattern.compile(\\\[(.*?\]);
@user1182217您可以使用
Pattern regex=Pattern.compile(“(\”);
并使用matcher获取grop 1。@rupinderjeet您和两个给出+1的人应该在编写/支持此类注释之前检查给出答案的日期和时间。如果我的输入字符串具有相同的模式,但我想提取它的两部分,该怎么办。
str1=“Hello”
str2=“Java”
。我怎样才能做到?救了我的命。如果你想得到全部,应该用复数形式的substringsBetwenn。谢谢!
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("\\((.*?)\\)");
Matcher regexMatcher = regex.matcher("Hello This is (Java) Not (.NET)");

while (regexMatcher.find()) {//Finds Matching Pattern in String
   matchList.add(regexMatcher.group(1));//Fetching Group from String
}

for(String str:matchList) {
   System.out.println(str);
}
Java
.NET
String result = StringUtils.substringBetween(str, "(", ")");