如何匹配两个字符串之间的任何内容?

时间:2015-05-29 14:35:44

标签: java regex string

我想匹配两个字符串中包含的任何内容,如下所示:

teststring = %-12x (my value)

模式:

%-(.*?)x (my value)

结果应该是:

12

但正则表达式不起作用。为什么呢?

3 个答案:

答案 0 :(得分:2)

你的正则表达式中有拼写错误(我的而不是可能),你需要逃避()

String s = "%-12x (may value)";
Matcher m = Pattern.compile("%-(.*?)x \\(may value\\)").matcher(s);
if (m.find() && m.groupCount() >= 1) System.out.println(m.group(1)); //12

答案 1 :(得分:1)

正则表达式不起作用,因为()是需要转义的元字符:

%-(.*?)x [(]my value[)]

如果没有[]\,引擎会将它们视为第二个捕获组的标记,这些捕获组始终会捕获"成功比赛后"my value"

如果您想制作适合replaceAll的正则表达式,请删除捕获组,并使用%-x [(]my value[)]作为前瞻和后视的一部分:

String s = "%-12x (my value)";
String r = s.replaceAll("(?<=%-).*?(?=x [(]my value[)])", "quick brown fo");
System.out.println(r); // prints "%-quick brown fox (my value)"

Demo.

答案 2 :(得分:0)

似乎&#39;?&#39;不需要,因为&#39; *&#39;你告诉必须有零个或多个任何角色。

应该是这样的%-(.*)x