正则表达式可从字符串下面获取数据。
下面是输入字符串
insert into data (name, Id, address) values (:name,:id,:add)
它应该仅返回除括号之外的第二个括号值 预期输出
:name,:id,:add
我在正则表达式下进行了尝试,但无法正常工作。它仅突出显示第一个括号。我需要第二个括号记录
(?<=\()[\w, ?]+(?=\))
答案 0 :(得分:3)
您可以使用此正则表达式抓取捕获的#1组:
/.*\(([^)]*)\)/
.*
很贪心,以确保我们总是匹配最后一对(...)
\(
:匹配文字(
(([^)]*)
:匹配捕获的#1组中不是)
的0个或多个字符\)
:匹配文字)
但是,如果要始终与第二对(...)
匹配,则使用此正则表达式并获取捕获的#1组:
/\([^)]*\)[^()]*\(([^)]*)\)/
代码:
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