我正在使用以下正则表达式 "location in \\((.*?)\\)"
针对以下字符串: pro 300 \ nlocation in(“aaa”,“bbb”)
根据java的在线正则表达式测试,结果应该是 “aaa”,“bbb” 但是当我在java代码中运行时,这样:
conditions.replaceAll("location in \\((.*?)\\)", "$1");
我 pro 300“aaa”,“bbb”
我做错了什么?提前谢谢。
答案 0 :(得分:7)
replaceAll()
正在替换正则表达式conditions
匹配的group(0)
部分。
要仅检索您需要使用的(...)
内的部分:
Pattern p = Pattern.compile("location in \\((.*?)\\)");
Matcher m = p.matcher(conditions);
if (m.find())
{
String s = m.group(1);
}
这将检索正则表达式(.*?)
答案 1 :(得分:2)
除了Rossiar的回答,如果您不想使用Pattern
和Matcher
类,只想使用replaceAll
方法,那么您的代码正在按预期工作< / strong>,你有以下字符串:
pro 300\nlocation in ("aaa","bbb")
^^^^^^^^^^^^^^^^^^^^^^^^^ and you replace this by "aaa","bbb"
所以,你的最后一个字符串是:
pro 300\n"aaa","bbb"
如果您只想使用"aaa","bbb"
获取replaceAll
,则必须使用以下内容匹配整个字符串:
conditions = conditions.replaceAll(".*location in \\((.*?)\\).*", "$1");
^--------- Note ---------^
或者您可以使用的特定字符串:
"pro 300\nlocation in (\"aaa\",\"bbb\")".replaceAll(".*\\((.*?)\\).*", "$1");
如果\n
与.*
没有匹配,我现在无法测试,所以如果不匹配则可以使用single line
标记替换多行或执行操作一个正则表达式的技巧:
单行标志
"pro 300\nlocation in (\"aaa\",\"bbb\")".replaceAll("(?s).*\\((.*?)\\).*", "$1");
<强> Working demo 强>
正则表现技巧
"pro 300\nlocation in (\"aaa\",\"bbb\")".replaceAll("[\\s\\S]*\\((.*?)\\)[\\s\\S]*", "$1");
<强> Working demo 强>