有没有办法在代码中使用正则表达式搜索多个嵌套的if语句?
例如,一个表达式,它将使用不同的样式(如果/ if,if / elseif / else)找到if语句的三个或更多层的实例:
if (...) {
<code>
if (...) {
<code>
if (...)
<code>
} else if (...) {
<code>
} else {
<code>
}
} else {
<code>
}
答案 0 :(得分:3)
使用正则表达式进行源代码搜索是个坏主意。 IMO。最好使用一些解析源代码的工具,然后允许您使用(例如)XPath样式路径表达式查询解析树。
源代码搜索的正则表达式的问题在于它们通常难以读写(除非您是正则表达式大师),并且由于正则表达式创建者的某些边缘情况,它们容易出现误报和漏报没有想到。 (例如,在关键字中使用\ uxxxx字符。)
以下是一些工具链接:
(请随意向其他人推荐。)
答案 1 :(得分:1)
除非,我误解了这个答案,肯定是没有。原因是,如果您必须跟踪嵌套级别,那么您所讨论的语言子集是无法匹配的正则表达式。正则表达式只能识别在确定性有限自动机中捕获的事物。要做这样的事情需要一个堆栈或计数器,它会将你移动到一个更强大的自动机类,称为下推自动机。
答案 2 :(得分:-3)
尝试:
((if\(.+\)(\n)?.*\n|(else)?[ ]*(if\(.+\))?(\{)?(\n)*.*(\n)*(\})?){3}((if\(.+\)(\n)?.*\n|(else)?[ ]*if\(.+\)\{(\n)*.*(\n)*\})*
有点冗长,但它会查找3个或更多语句,这些语句由带有条件和可选大括号的if语句组成,或带有可选条件和可选大括号的else if语句。