java - 不匹配子字符串的正则表达式

标签 java regex

我正在尝试匹配一些包含不匹配字符串的 Java 代码。例如,我有以下要匹配的代码块:

protected String methodName(String args[]) {

    final String METHOD = "wrongMethodName";
    ...

}

下面的代码块我不想匹配

protected String methodName(String args[]) {

    final String METHOD = "methodName";
    ...

}

现在,我有以下(不起作用)正则表达式,需要启用 DOTALL:

(\w+?)\(.*?\) ?{.*?METHOD *= *".*?";

如果我尝试使用捕获组进行负向后查找,则正则表达式不会编译,因为事先不知道向后查找的大小。

java.util.regex.PatternSyntaxException:
    Look-behind group does not have an obvious maximum length near index 39

有没有办法可以使用此正则表达式中的捕获组来表示我想要匹配与捕获组不匹配的字符串?

最佳答案

我认为您可以使用否定前瞻(如果我正确理解您的问题),请尝试:

(\b\w+?\b)\(.*?\) ?{.*?METHOD *= *"(?!\1).*?"

查看here on Regexr

我还在第一组中使用了单词边界,否则它只是从第二个字母开始匹配。

关于java - 不匹配子字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8416550/

相关文章:

Javassist仪器

java - 关于线程同步的几个问题

c++ - xcode 和 c++ 正则表达式?

javascript - 将错误与 if 语句混淆

java - 如何使用带有 newDirectoryStream 的 glob 来仅列出没有扩展名的文件?

java - Hadoop-在Reducer中排序

java - 如何通过 Maven 运行 stilliard/pure-ftpd

java - 使用 char 而不是 String 的要点

ruby - 如何获取字符串中所有出现的 Ruby 正则表达式的匹配数据?

regex - 使用 Notepad++ 删除所有(不)匹配正则表达式的行