Java 如何匹配两个字符串之间的任何内容?
我希望匹配两个字符串中包含的任何内容,如下所示:Java 如何匹配两个字符串之间的任何内容?,java,regex,string,Java,Regex,String,我希望匹配两个字符串中包含的任何内容,如下所示: teststring = %-12x (my value) 模式: %-(.*?)x (my value) 结果应该是: 12 但正则表达式不起作用。为什么?正则表达式不起作用,因为(和)是需要转义的元字符: %-(.*?)x [(]my value[)] 没有[]或\时,引擎将它们视为第二个捕获组的标记,该组在成功匹配时始终“捕获”“我的值” 如果要使正则表达式适用于replaceAll,请删除捕获组,并使用%-和x[(]my valu
teststring = %-12x (my value)
模式:
%-(.*?)x (my value)
结果应该是:
12
但正则表达式不起作用。为什么?正则表达式不起作用,因为
(
和)
是需要转义的元字符:
%-(.*?)x [(]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)"
String s=“%-12x(我的值)”;
字符串r=s.replaceAll(“(?似乎不需要“?”),因为使用“*”表示必须有零个或多个字符
应该是这样的%-(*)x
您的正则表达式中有一个输入错误(my而不是may),您需要转义()
:
my
vsmay
和转义(
和)
。用于测试。”包含在两个字符串中“哪些字符串?谢谢,这很有效,因为它找到了匹配的完整内容,而不仅仅是数字12
,@membersound您必须提取捕获组。@membersound通过调用match.group(1)首先从匹配中提取12
。”
。谢谢你,除了如果有几个开始字符串,比如%-%-%-12x
,我只想匹配最新的%-
。但是目前它找到了第一个。。怎么样:m.group(m.groupCount())
?谢谢。是否也可以只替换找到的组(数字)?模式。匹配器.replaceAll(“100”);
将替换全部内容%-12x(我的值)
,而不仅仅是数字。@membersound我不确定
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