Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何匹配两个字符串之间的任何内容?_Java_Regex_String - Fatal编程技术网

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
vs
may
和转义
。用于测试。”包含在两个字符串中“哪些字符串?谢谢,这很有效,因为它找到了匹配的完整内容,而不仅仅是数字
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