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));
}