繁体   English   中英

使用 RegEx 提取字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM