什么正则表达式只在C++;源文件 我有一个C++应用程序,我将转换每个字符串文字和方法来使用泛型类型来启用Unicode,换句话说,下面的转换是在 const char* str = "this is \"simple string\""; //=> const TCHAR* str = _T("this is \"simple string\""); MessageBoxA(NULL, "message", "title", MB_OK);//=>MessageBox(NULL, _T("message"), _T("title"), MB_OK); size_t len = strlen(str);//=>size_t len = _tcslen(str);

什么正则表达式只在C++;源文件 我有一个C++应用程序,我将转换每个字符串文字和方法来使用泛型类型来启用Unicode,换句话说,下面的转换是在 const char* str = "this is \"simple string\""; //=> const TCHAR* str = _T("this is \"simple string\""); MessageBoxA(NULL, "message", "title", MB_OK);//=>MessageBox(NULL, _T("message"), _T("title"), MB_OK); size_t len = strlen(str);//=>size_t len = _tcslen(str);,c++,regex,string,replace,C++,Regex,String,Replace,最大的问题是,应用程序包含很多文本字符串,我需要一个正则表达式模式来只查找文本字符串并用_T(以前的_str)替换它们,我从web和stackoverflow中找到了许多表达式,但它们也匹配头包含的字符串 #include "stdafx.h" // => #include _T("stdafx.h") 我还需要避免以_T开头(并以[之前已经转换过的]结尾)的字符串。Ahmed这是一个有趣的问题。让我们谈谈如何使用正则表达式来实现这一点。有很多选择,下面是我要做的 答:我会在Visual

最大的问题是,应用程序包含很多文本字符串,我需要一个正则表达式模式来只查找文本字符串并用_T(以前的_str)替换它们,我从web和stackoverflow中找到了许多表达式,但它们也匹配头包含的字符串

#include "stdafx.h" // => #include _T("stdafx.h")

我还需要避免以_T开头(并以[之前已经转换过的]结尾)的字符串。

Ahmed这是一个有趣的问题。让我们谈谈如何使用正则表达式来实现这一点。有很多选择,下面是我要做的

答:我会在VisualStudio之外处理文件,这样您就可以充分利用正则表达式的功能。可以使用C++、C语言或脚本语言,如PHP或Python,并为它提供一个文件数组来处理,或者文件夹。 B.下面是一个正则表达式,它将捕获您想要加入组1的字符串:

(?s)_T\([^)]*\)|#include[^\n]*|"((?:[^"]|(?<=\\)")+)(?<!\\)"
调用语言的regex Replace函数时,不是直接传递替换,而是传递回调函数。该函数将自动访问组1匹配项(这就是替换回调的工作方式),您可以根据自己的内心内容操作替换项:例如,如果组1为空,则不替换(这意味着我们匹配了您希望避免的字符串)。如果你有一组1,做你的串联魔术


很难说得更具体,但这是我使用regex时遵循的一般方法。

您正在尝试解析源代码。这是一项艰巨的任务。这就是为什么如果你选择正则表达式路径(硬件),你将需要一个强大的正则表达式引擎,如PCRE或.NET。那么您使用的是什么引擎,您尝试过什么呢?我使用visual studio 2013 IDE,它挂起很长一段时间,您仍然可以在两个过程中完成:将所有
“string”
转换为
\T(“string”)
,然后将所有
\include\T(“stdafx.h”)
转换为
\include“stdafx.h”
(与
\T(“string”)相同)
->
\u T(“字符串”)
)。这可能很好,但很长,但规则的力量在哪里expressions@ahmedsafan86:当然是在分析常规语法时。这就是这个名字的由来。但C++是不规则的。这真是太好了。我在我最喜欢的.NET ReXEX在线测试仪上测试过了。我的模式会帮助我很多,我在L中加了一个部分来考虑L,“BaMaY(s)L”(?:[^?] ](?@ AHMMESAFAN866,这是一种乐趣,很高兴它帮助了,谢谢你的友好反馈。)
(?s)_T\([^)]*\)|#include[^\n]*|("(?:[^"]|(?<=\\)")+(?<!\\)")