Java 使用正则表达式在try块中查找特定字符串

Java 使用正则表达式在try块中查找特定字符串,java,regex,Java,Regex,我想用正则表达式找到一个块。这里使用下面的reg表达式来查找try块,该块中只有“logger.error(……..”),没有业务逻辑。请参阅下面的代码示例代码参考 尝试[\s]\{((/\(.\124;[\ r\n])?\/)\124;\ s)*\} 因此,请使用explain在try块中提供如何查找logger.error 例: 提前感谢因为{}理论上可以无限期嵌套,所以在regex中无法可靠地匹配。如果您知道您的try块有一个catch(它应该有),您可以将它与这个庞大的正则表达式相匹配(

我想用正则表达式找到一个块。这里使用下面的reg表达式来查找try块,该块中只有“logger.error(……..”),没有业务逻辑。请参阅下面的代码示例代码参考

尝试[\s]\{((/\(.\124;[\ r\n])?\/)\124;\ s)*\}

因此,请使用explain在try块中提供如何查找
logger.error

例:


提前感谢

因为{}理论上可以无限期嵌套,所以在regex中无法可靠地匹配。如果您知道您的
try
块有一个
catch
(它应该有),您可以将它与这个庞大的正则表达式相匹配(避免在字符串或注释中匹配单词
try
catch

您的代码块将位于捕获组2内

(['"])(?:(?!\1|\\).|\\.)*\1|\/\/[^\n]*(?:\n|$)|\/\*(?:[^*]|\*(?!\/))*\*\/|(\btry\b(?:(['"])(?:(?!\3|\\).|\\.)*\3|\/\/[^\n]*(?:\n|$)|\/\*(?:[^*]|\*(?!\/))*\*\/|(?:[^c]|\Bc|c(?!atch)|catch\B))*\bcatch\b)


正如前面的评论所述,单用一个正则表达式是无法做到这一点的。 当我偶然发现这样的任务时,我喜欢使用AWK脚本

/try/{
 //You found the start of a try block
 printLineNumber = true;
}

/logger\.error/{
 if(printLineNumber){
  print NR; //NR is an AWK field, that contains the current line number
 }
}

/catch/{
 //You found the end of a try block
 printLineNumber = false;
}
我没有尝试过这个代码,所以它可能不会马上工作。
谷歌一点AWK,基础知识可以很快学会,它将在很多情况下帮助你,而不仅仅是这一项任务。

Java代码解析另一个Java代码,你能澄清你在这里做什么吗?你不能像你一样,用一个正则表达式可靠地解析代码。现在我在try块中找到了line logger.error(“…”)。我试图找到使用注册经验。所以挣扎与注册经验以上的要求。所以,请确实需要ful。您可以使用一个循环和一个标志来跟踪您是否处于try块中,然后进行检查。一个正则表达式,就像TJ Crowder所说的,是不可能的。@KaviK你实际上想做的是解一个微分方程,而不需要微积分(或拉普拉斯变换)。
/try/{
 //You found the start of a try block
 printLineNumber = true;
}

/logger\.error/{
 if(printLineNumber){
  print NR; //NR is an AWK field, that contains the current line number
 }
}

/catch/{
 //You found the end of a try block
 printLineNumber = false;
}