C 在记事本中使用正则表达式(RegEx)切换字符串位置++
我在C代码中有以下模式: 如果已定义,则为MSC版本 双CC[16]uu declspecalign64={0}; 其他的 双CC[16]uuu属性_uuu对齐64={0}; 恩迪夫 这是一个错误,因为它应该是uu declspecalign64 double CC[16]={0} 我想用正则表达式在许多文件中修复它。如果表达式的格式与Notepad++兼容,我会很高兴 因此,我需要的是捕获以下项目: double CC[]-以字母开头的东西,在看到uu declspec之前不捕捉行的开头,即制表符或空格,注意u declspec之前的空格。 以uu declspec开头,以结尾的东西。 包括在内的一切;。 然后我想把它们按正确的顺序排列:最小化第一项和第二项之间的间距 解决方案应该是稳健的,因为有时情况是:C 在记事本中使用正则表达式(RegEx)切换字符串位置++,c,regex,grep,notepad++,C,Regex,Grep,Notepad++,我在C代码中有以下模式: 如果已定义,则为MSC版本 双CC[16]uu declspecalign64={0}; 其他的 双CC[16]uuu属性_uuu对齐64={0}; 恩迪夫 这是一个错误,因为它应该是uu declspecalign64 double CC[16]={0} 我想用正则表达式在许多文件中修复它。如果表达式的格式与Notepad++兼容,我会很高兴 因此,我需要的是捕获以下项目: double CC[]-以字母开头的东西,在看到uu declspec之前不捕捉行的开头,即制
#if defined (_MSC_VER) && !defined(__clang__)
double pU[3*4*K_MAX_STACK] __declspec(align(64));
#else
double pU[3*4*K_MAX_STACK] __attribute__ ((aligned (64)));
#endif
我试了点东西,但没有!成功
备注:
我在小型矩阵的开源BLAS库中遇到了这个问题,我想帮助解决这个问题
解决方案
根据@which给出的答案,99%的工作是由我完成的:
\b(.*?])\s(__declspec.+?\)\))(.*?;)
有关解决方案,请访问
\b-捕获所有内容,直到一个新词开始。
.*?]-捕获第一个字符之前的任何字符]。另存为1美元。
\s-捕获任何空格或任何空白选项卡等。。。。
__declspec.+?\\-捕获以u declspec开头并以第一个字符结尾的任何字符集。另存为2美元。
.*?; - 捕获在第一个空格之前包含的所有内容;。节省为3美元。
新字符串的值由$2$1$3给出
这也可以很好地使用。看看这个正则表达式,看看它是否适合您 \b、 *?\s\uu declspec.+?\\.*?; 第一组收集double声明,包括方括号内的任何内容。例:双CC[16] 第二个组从uu declspec收集到并包括两个右括号,例如:u declspecalign64注意,它也收集u declspec之前的空格 第三组收集这两个结束括号之后的所有内容,包括分号;。ex:={0} 使用带有$2$1$3的Regex101 replace函数,它将生成您所请求的内容 让我知道这是否有帮助,或者是否有什么需要解释 注:OP使用的最终正则表达式为: \b、 +?\s\uu declspec.+?\\.*?;
看起来不错。唯一的一件事是,它捕获了“decl…”。即具有引导空间。我们可以让它不捕获它吗?似乎我只需要删除/s,对吗?然后空间将转到我想要的第一个捕获,而不需要训练空间。好的,我尝试了:\b.+?\s\uu declspec.+?\.*?;而且它似乎起作用了!另存为。标记你的答案。