正则表达式从括号中提取第二条匹配记录

时间:2018-08-27 08:58:03

标签: regex

正则表达式可从字符串下面获取数据。

下面是输入字符串

insert into data (name, Id, address) values (:name,:id,:add)

它应该仅返回除括号之外的第二个括号值 预期输出

:name,:id,:add

我在正则表达式下进行了尝试,但无法正常工作。它仅突出显示第一个括号。我需要第二个括号记录

(?<=\()[\w, ?]+(?=\))

2 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式抓取捕获的#1组:

/.*\(([^)]*)\)/

RegEx Demo

  • .*很贪心,以确保我们总是匹配最后一对(...)
  • \(:匹配文字(
  • (([^)]*):匹配捕获的#1组中不是)的0个或多个字符
  • \):匹配文字)

但是,如果要始终与第二对(...)匹配,则使用此正则表达式并获取捕获的#1组:

/\([^)]*\)[^()]*\(([^)]*)\)/

RegEx Demo 2

代码:

final String regex = "\\([^)]*\\)[^()]*\\(([^)]*)\\)";
final String string = "insert into data (name, Id, address) values (:name,:id,:add) (:foo,\"bar)";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
    System.out.println(matcher.group(1));
}

输出:

:name,:id,:add

答案 1 :(得分:0)

我会用这个:([:][\w]+),这样您就可以在自己的匹配组中得到结果,并且很容易说出在哪个地方需要哪个参数,以防万一出错。

看看the demo