我想匹配两个字符串中包含的任何内容,如下所示:
teststring = %-12x (my value)
模式:
%-(.*?)x (my value)
结果应该是:
12
但正则表达式不起作用。为什么呢?
答案 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)"
答案 2 :(得分:0)
似乎&#39;?&#39;不需要,因为&#39; *&#39;你告诉必须有零个或多个任何角色。
应该是这样的%-(.*)x
。