如何查找不包含子模式的模式



我正在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组的值。

相关内容

  • 没有找到相关文章

最新更新