作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Input-> Input!RC + Calc!R[1]C[1]
在输出中我想对这些进行操作:
RC and R[1]C[1]
我的尝试:
private static void findMatch(String formula) { Matcher m = Pattern.compile("\\W(R(\\[(.+?)\\])?C(\\[(.+?)\\]))") .matcher(formula); // Matcher m = Pattern.compile( // "\\W(R(\\[(.+?)\\])?C) | \\W(R(\\[(.+?)\\])?C(\\[(.+?)\\]))") // .matcher(formula); for (; m.find(); m.reset(formula)) { System.out.println(m.group(3)); } }
它也不会寻找第二个模式,因为它会进入无限循环。
这有什么问题吗?
最佳答案
尝试以下操作:
String formula = "Input!RC + Calc!R[1]C[1]";
Matcher m = Pattern.compile("\\W(R(\\[(.+?)\\])?C(\\[(.+?)\\])?)").matcher(formula);
while (m.find()) {
System.out.println(m.group(1));
}
输出:
RC
R[1]C[1]
这里的主要变化是循环的工作方式,我上面的是迭代模式匹配的典型方法。我还打印 m.group(1)
而不是 m.group(3)
因为它是第一个包含整个匹配项的组,除了 !
,我认为这就是您想要的。
此处对正则表达式的唯一更改是在第二个 (\\[(.+?)\\])
组之后添加 ?
以使其成为可选的。
关于java - 遍历正则表达式查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14865826/
我是一名优秀的程序员,十分优秀!