我想获取单词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);
您还可以在括号内使用 [^()]*
来获取单撇号内的值:
Pattern patter1 = Pattern.compile("SETVAR[(]{2}[^()]*'&&(\\w+)'[)]{2}");
^^^^^^
让我为您分解正则表达式:
SETVAR
- 从字面上匹配SETVAR
,然后...[(]{2}
- 从字面上匹配 2(
,然后...[^()]*
- 匹配除(
或)
之外的 0 个或多个字符,最多...'&&
- 匹配一个撇号和两个&
符号,然后...(\\w+)
- 将一个或多个单词字符匹配并捕获到第 1 组中'[)]{2}
- 匹配一个撇号,然后按字面意思匹配 2 个)
符号。
关于java - Java中的正则表达式有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908555/