java - Java中的正则表达式有什么问题

标签 java regex

我想获取单词text2,但它返回null。您能更正一下吗?

String str = "Text SETVAR((&&text1 '&&text2'))";
Pattern patter1 = Pattern.compile("SETVAR\\w+&&(\\w+)'\\)\\)");
Matcher matcher = patter1.matcher(str);
String result = null;
if (matcher.find()) {
    result = matcher.group(1);
}
System.out.println(result);

最佳答案

一种方法是匹配括号中所有可能的模式:

String str = "Text SETVAR((&&text1 '&&text2'))";
Pattern patter1 = Pattern.compile("SETVAR[(]{2}&&\\w+\\s*'&&(\\w+)'[)]{2}");
Matcher matcher = patter1.matcher(str);
String result = "";
if (matcher.find()) {
    result = matcher.group(1);
}
System.out.println(result);

参见IDEONE demo

您还可以在括号内使用 [^()]* 来获取单撇号内的值:

Pattern patter1 = Pattern.compile("SETVAR[(]{2}[^()]*'&&(\\w+)'[)]{2}");
                                               ^^^^^^

参见another demo

让我为您分解正则表达式:

  • SETVAR - 从字面上匹配 SETVAR,然后...
  • [(]{2} - 从字面上匹配 2 (,然后...
  • [^()]* - 匹配除 () 之外的 0 个或多个字符,最多...
  • '&& - 匹配一个撇号和两个 & 符号,然后...
  • (\\w+) - 将一个或多个单词字符匹配并捕获到第 1 组中
  • '[)]{2} - 匹配一个撇号,然后按字面意思匹配 2 个 ) 符号。

关于java - Java中的正则表达式有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908555/

相关文章:

java - Spring Batch Partitioning 在 itemReader 中注入(inject) stepExecutionContext 参数

java - 在Java中的方法中更新对象

java - 检查二维数组中某个索引周围的索引的最佳方法

java - Java中如何将原图resize为普通图片大小?

javascript - 使用正则表达式验证 mm/dd/yyyy

java - 为什么 OpenJDK 将私有(private)方法放入 vtable 中?

regex - [a-z]如何匹配é?

Java Mongodb 正则表达式查询

javascript - 使用正则表达式从函数中删除参数类型

regex - 通过 htaccess 将部分添加到 URL