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