Java 什么';s regex捕获的值是哪个init字符串直到结束字?

Java 什么';s regex捕获的值是哪个init字符串直到结束字?,java,regex,Java,Regex,我的参赛作品: String e1 = "MyString=1234 MyString=5678"; String e2 = "MyString=1234\nMyString=5678"; 我在做什么: String pattern = "MyString=(.*)"; Pattern patternObj = Pattern.compile(pattern); Matcher matcher = patternObj.matcher(e1); //e1 or e2 if (matcher.

我的参赛作品:

String e1 = "MyString=1234 MyString=5678";
String e2 = "MyString=1234\nMyString=5678";
我在做什么:

String pattern = "MyString=(.*)";
Pattern patternObj = Pattern.compile(pattern);
Matcher matcher = patternObj.matcher(e1);  //e1 or e2
if (matcher.find()) {
    System.out.println("G1: " + matcher.group(1));
    System.out.println("G2: " + matcher.group(2));
}
我想要的输出:

G1: 1234
G2: 5678

只有一组将被多次匹配。您必须保持匹配和打印组1:

int i = 0;
while (matcher.find()) {
    System.out.println("G" + (++i) + ": " + matcher.group(1));
}

此外,还需要更新模式,使其与下一个
MyString
不匹配。您可以使用
\d+
\w+
[^\s]+
,具体取决于您要匹配的值的类型。

如果它始终是数字,您可以将其用作正则表达式:

String pattern = "MyString=([0-9]*)";
如果它既包含字母也包含数字,那么Wiktor Stribizew的评论在原始帖子中非常有用。他说要使用与单词字符匹配的字符。

最简单的“快速修复”方法是将
(除换行符外的任何字符)替换为
\w
(字母、数字或下划线):


String pattern=“MyString=(\\w*)”;//将
替换为
\w
“\\w”
)。但是,您似乎可以先用空格分割这些字符串,然后再用
=
分割。这在Wiktor中非常有效。谢谢
String pattern = "MyString=(\\w*)"; // <---- HERE
Pattern patternObj = Pattern.compile(pattern);
Matcher matcher = patternObj.matcher(e1); 
if (matcher.find()) {
    System.out.println("G1: " + matcher.group(1));
    System.out.println("G2: " + matcher.group(2));
}