Regex:如何使用负前瞻排除搜索词前面或后面可能出现的特定字符 让我说我有C++类的Calimar。在cpp文件中,我会有一堆以CAnimal::XXX开头的定义,以及作为构造函数的CAnimal::CAnimal
对于正则表达式,我希望搜索具有CANIAL但排除与类方法定义相关的所有内容的行 我想出了Regex:如何使用负前瞻排除搜索词前面或后面可能出现的特定字符 让我说我有C++类的Calimar。在cpp文件中,我会有一堆以CAnimal::XXX开头的定义,以及作为构造函数的CAnimal::CAnimal,regex,visual-studio,Regex,Visual Studio,对于正则表达式,我希望搜索具有CANIAL但排除与类方法定义相关的所有内容的行 我想出了*CAnimal(?!::) 但是,这将显示任何构造函数(因为构造函数::CAnimal的后面部分后面不跟::) 所以我尝试使用*CAnimal.*(!::) 然而,这包括了我想象不到的一切 我怎么能在没有任何方法定义或构造函数的情况下搜索具有CANIAL的行呢 如果我有包含如下犬齿的线条 CAnimal Bob; CAnimal Cat; CAnimal::CAnimal() CAnimal::MoveSp
*CAnimal(?!::)
但是,这将显示任何构造函数(因为构造函数::CAnimal的后面部分后面不跟::)
所以我尝试使用*CAnimal.*(!::)
然而,这包括了我想象不到的一切
我怎么能在没有任何方法定义或构造函数的情况下搜索具有CANIAL的行呢
如果我有包含如下犬齿的线条
CAnimal Bob;
CAnimal Cat;
CAnimal::CAnimal()
CAnimal::MoveSpeed()
BEGIN_MESSAGE_MAP(CAnimal, CWinApp)
我只想提取
CAnimal Bob;
CAnimal Cat;
BEGIN_MESSAGE_MAP(CAnimal, CWinApp)
您可以尝试以下模式:
(?)
它使用负环视法:)
为什么不使用像clangs libtooling这样的工具,以便您可以实际搜索AST,而不是使用正则表达式进行原始文本搜索?主要是因为我从未接触过AST的概念。这是一种非常有趣的代码阅读方式。非常感谢你!我会调查的。@ShintaroTakechistd::regex
不支持lookbehinds。您是否使用了boost::regex
?@WiktorStribiżew此问题旨在将regex用于Visual Studio搜索功能。我提到C++是因为这是我正在搜索的特定文件,但我没有将正则表达式作为我的程序的一个功能来实现。如果看“前方”,我应该期待“后面”。谢谢