How to avoid matching unwanted blocks in regex.
For example, I just want to match the static prototypes in C language and how to make it not include the main function.
/**
* @brief
*
* @param dsc
*/
static void func1(const char *dsc);
/**
* @brief
*
* @param argc
* @param argv
* @return int
*/
int main(int argc, char *argv[]);
/**
* @brief
*
* @param dsc
*/
static void fun2(const char *dsc);
my regex is
\/\*[\w\W]*?\*\/\n ^static.*\);
and it alway match the main function prototypes. In Vscode just like this:
CodePudding user response:
You can use
/\*(?:(?!/\*|\*/)[\w\W])*?\*/\n static.*\);
Note that you do not need to escape the /
char in the search and replace field since the regex is defined with a mere string, not a regex literal notation where /
chars are used as regex delimiters.
The (?:(?!/\*|\*/)[\w\W])*?
part makes it match any char, zero or more but as few as possible times, that does not start a /*
or */
char sequence.
You do not need ^
as a start of a line anchor here since it makes no sense after \n
, it is implied there.