Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 包含具有特定术语的所有catch块的正则表达式_Regex_Search - Fatal编程技术网

Regex 包含具有特定术语的所有catch块的正则表达式

Regex 包含具有特定术语的所有catch块的正则表达式,regex,search,Regex,Search,我最近看到了这个stackoverflow问题,它排除了带有特定单词的所有catch语句 你会怎么做呢 我尝试过将消极环视部分切换为积极环视,但所做的只是捕获空的异常 catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?:[^}](?=\blog\b))*\} 例如: catch (Exception e) { log.debug("word"); //stuff } 我想查找“log.debug”的所有实例您可以像这样使用正向前瞻: ca

我最近看到了这个stackoverflow问题,它排除了带有特定单词的所有catch语句

你会怎么做呢

我尝试过将消极环视部分切换为积极环视,但所做的只是捕获空的异常

catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?:[^}](?=\blog\b))*\}
例如:

catch (Exception e) 
{
    log.debug("word");
            //stuff
}

我想查找“log.debug”的所有实例

您可以像这样使用正向前瞻:

catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?=[^\}]*\blog\b)[^\}]+\}
(?=[^\}]*\blog\b)
检查该catch块中是否有
log
,仅当有单词
log
时才匹配

如果要查找
log.debug
,只需将正则表达式编辑为:

catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?=[^\}]*\blog\.debug\b)[^\}]+\}

提供一些示例。特别是,您的意思是“我想用log查找所有catch块”吗?是的,我想查找log.debug的所有实例。我不确定这是否应该是一个新问题,但在找到logger.debug的所有实例之后,您如何在eclipse中将其替换为logger.error?不太确定$symbol在正则表达式中是如何工作的。@用户您使用的是特定的语言/正则表达式引擎吗?如果您使用的是PCRE引擎,您可以执行以下操作。否则,如果不支持
\G
\K
,我认为最好提取整个catch块并对其进行完全替换
.NET
可以使用可变宽度lookbehinds,我认为这比PCRE更容易。但是我不认为javascript/java/python可以在单个正则表达式中实现这一点,因为还有其他代码块(不是catch块)。我不相信它支持/K。不过谢谢你的帮助@用户嘿,如果您将catch块包装在一些特殊字符周围,则可能无法找到该文件。我不知道,假设
~
从未出现在文件中,您可以使用第一个正则表达式将
~
放在
(如
~catch
)之前,将
log.debug
放在右大括号(如
}
)之后。然后,使用一个具有前瞻性的正则表达式替换内部的所有
log.debug
。之后,使用最后一次替换删除文件中的
~
catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?=[^\}]*\blog\.debug\b)[^\}]+\}