[英]Extracting String from using RegEx
我需要从以下多行字符串中提取 VALUE1、VALUE2 和 VALUE3:
String input = "aa a\r\na aa \r\na getString(\"VALUE1\");aagetInt(\"VALUE2\");aa\r\n a getString(\"VALUE3\"); aaa\r\naaa";
我试过了:
Pattern pattern = Pattern.compile("\"(\\S+)\"+");
Matcher matcher = pattern.matcher(input);
while (matcher.find())
System.out.println(matcher.group(1));
但这会产生:
VALUE1\");aagetInt(\"VALUE2\");aa\r\n a getString(\"VALUE3
它需要第一个和最后一个引号之间的所有内容。
然后我尝试了这个:
"(.*)get(\\S+)\\(\"(\\S+)\"(.*)"
但这只需要最后一个匹配,VALUE3(使用 matcher.group(3))。
如何获得所有 3 个值:VALUE1、VALUE2、VALUE3?
你的模式有点偏离。 使用这个版本:
String input = "aa a\r\na aa \r\na getString(\"VALUE1\");aagetInt(\"VALUE2\");aa\r\n a getString(\"VALUE3\"); aaa\r\naaa";
Pattern p = Pattern.compile("\\w+\\(\"(.*?)\"\\)");
Matcher m = p.matcher(input);
while (m.find())
System.out.println(m.group(1));
这打印:
VALUE1
VALUE2
VALUE3
使用\S+
匹配所有非空白字符,并首先使用.*
匹配到行尾,因此在这两种模式中你匹配的太多了。
获取以get
开头的括号中的值并使用非贪婪\S+?
(注意 is 不匹配空格):
get[^\s()]*\("(\S+?)"\)
例子:
String input = "aa a\r\na aa \r\na getString(\"VALUE1\");aagetInt(\"VALUE2\");aa\r\n a getString(\"VALUE3\"); aaa\r\naaa";
String regex = "get[^\\s()]*\\(\"(\\S+?)\"\\)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
Output
VALUE1
VALUE2
VALUE3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.