Regex 尝试使用grep执行多行perl正则表达式,不包括短语

Regex 尝试使用grep执行多行perl正则表达式,不包括短语,regex,grep,Regex,Grep,所以我试图找到遵循排除某些文本的模式的函数。我知道如果我在寻找以下函数 void myfunction(unsigned int a) { //Something something here } 我可以通过以下方法找到它 grep -IPzor 'void.*myfunction(\n|.)*\{(\n|.)*\}' ./* 这似乎能正常工作。有两件事我不知道该怎么做 1)如果我想忽略包含短语“something”的函数,该怎么办? 假设我现在有以下功能: void myfuncti

所以我试图找到遵循排除某些文本的模式的函数。我知道如果我在寻找以下函数

void myfunction(unsigned int a)
{
  //Something something here 
}
我可以通过以下方法找到它

grep -IPzor 'void.*myfunction(\n|.)*\{(\n|.)*\}' ./*
这似乎能正常工作。有两件事我不知道该怎么做

1)如果我想忽略包含短语“something”的函数,该怎么办?

假设我现在有以下功能:

void myfunction1(unsigned int a)
{
  //Something something here 
}

void myfunction2(unsigned int a)
{
  //Other stuff here
}
我只想找到函数2之类的东西。我试着做:

grep -IPzor 'void.*myfunction(\n|.)*\{(\n|.)*(?!Something|something)(\n|.)*\}' ./*
不同的变化并不像我预期的那样有效。它只是找不到任何东西,将短语从“某物”改为“无”也无济于事

2)如果我想在只找到相同数量的“{”和“}”的情况下找到结果,该怎么办?

我不知道从哪里开始。结果有时会在函数后面出现额外的文本

以下是我读过的一些链接:


#1你的消极前瞻应该有一定的灵活性:
(?!(?i)。*something)
#2.你不能用常规的expressions@glennjackman谢谢,我尝试了
grep-IPzor'void.*我的函数(\n |)*\{(\n |)*(?!(?I)。*某物(\n |)*\}./*
但它似乎不起作用。我想我不知道我做了什么?
perldoc perlre
——这是RE中的不区分大小写标志