Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
C 在记事本中使用正则表达式(RegEx)切换字符串位置++_C_Regex_Grep_Notepad++ - Fatal编程技术网

C 在记事本中使用正则表达式(RegEx)切换字符串位置++

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之前不捕捉行的开头,即制

我在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开头,以结尾的东西。 包括在内的一切;。 然后我想把它们按正确的顺序排列:最小化第一项和第二项之间的间距

解决方案应该是稳健的,因为有时情况是:

#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.+?\.*?;而且它似乎起作用了!另存为。标记你的答案。