我正在Netbeans项目(Java)上工作,我正在检查是否一切正常。我刚刚发现Netbeans中的Find工具支持正则表达式,所以我使用以下Regex来查找正确的代码:
ps.set.*(3, c0.get((.*)));(n.*){3}.*ps.set.*(7, c1.get(t).get(1));n.*ps.addBatch();
^^ ^^
Subpattern 1... ...must also appear here
示例(由上面的正则表达式匹配):
ps.setString(3, c0.get(fooPattern)); // "fooPattern" here...
ps.setDouble(5, s.get(k));
ps.setDouble(6, 0d);
ps.setLong(7, c1.get(t).get(fooPattern)); // ... must also be here
ps.addBatch();
我需要它检查子模式1
是否出现在第二个位置。这个正则表达式可以工作。但是,我需要找到所有不发生的地方。
示例(我想找到的):
ps.setString(3, c0.get(fooPattern)); // "fooPattern" here...
ps.setDouble(5, s.get(k));
ps.setDouble(6, 0d);
ps.setLong(7, c1.get(t).get(barPattern)); // ... is NOT here
ps.addBatch();
所以,具体的问题是:如何修改这个正则表达式,以找到子模式1
在它应该的位置不重复的所有事件?
使用我已经提到的负面展望,只是使用消费子模式而不是1
(这是在您的原始正则表达式中消费文本)。另外,不要忘记,要匹配文字点,需要对其进行转义。
ps.set.*(3, c0.get((.*)));(n.*){3}.*ps.set.*(7, c1.get(t).get((?!1))[^()]*));n.*ps.addBatch();
^^^^^^^^^^^^
查看regex演示
(?!1))
负向前看限制了更通用的[^()]*
模式(匹配除(
和)
以外的零个或多个字符,如果里面可以有括号,您可以用.*
替换它),使其失败,如果这些0+字符等于捕获到第1组的值。