- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在寻找一个正则表达式来匹配 C++ 项目中的 MBCS 字符串。这些是包含在双引号中的字符串,没有 L"..."
或 _T("...")
说明符。任何一行代码都可以有多个引号。字符串可以包含不应结束匹配的转义子字符串。下面是几个例子:
"This is a MBCS string"; // "This is a MBCS string" match
_T("This is maybe a unicode string"); // no match
L"This is a unicode string"; // no match
"These both" + "should match"; // "These both" and "should match" match
"This is a \"quoted\" string"; // "This is a \"quoted\" string" match
我有一个正则表达式,可以使用负面回顾处理所有这些问题 (?<!#include )(?<!_T\()(?<!\\)(?<!L)\"(.*?)\"(?<!\\\")
但它变得更复杂了。它开始出现在一行中混合字符串类型的问题。
_T("Maybe this") + "is a match"; // "is this" match but instead would match ") + "
do_something(_T("This doesn't match")) + do_something("but this does match"); // "but this does match" match but instead it matches ")) + do_something("
如何让正则表达式不匹配 _T("")
和 L""
单词但仍然匹配它们以吃掉结束引号而不将其作为匹配项返回?
编辑:这个正则表达式,(?:_T\(\"[^\"]+\"\).*?|L\"[^\"]+\".*?)*(?<!#include )(?<!_T\()(?<!L)(?<!\\)\"(.*?)\"(?<!\\\")
,几乎完成了这项工作,但还有一个失败的测试用例,我最初没想到要包括在内。
_T("don't match this") + _T("or this"); // shouldn't match anything, matches ") + _T("
最佳答案
您实际上可能会匹配 _T
和 L
部分,以便在之前的匹配中使用它们:
(?:_T\(\"[^\"]+\"\).*?|L\"[^\"]+\".*?)?(?<!#include )(?<!_T\(|L|\\)\"(.*?)\"(?<!\\\")
我还缩短了负面回顾。
关于c++ - 正则表达式匹配任何行上的多个 MBCS 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125012/
我有一个 MFC 应用程序,其中字符集是“未设置”。在具有多字节字符集代码页的操作系统上运行此应用程序有哪些相关风险? 最佳答案 “字符集:未设置”选项未定义 _MBCS也不_UNICODE .这意味
我正在寻找一个正则表达式来匹配 C++ 项目中的 MBCS 字符串。这些是包含在双引号中的字符串,没有 L"..."或 _T("...")说明符。任何一行代码都可以有多个引号。字符串可以包含不应结束匹
我在使用 Python 脚本打开包含元音变音字符的文件时遇到问题。当然,我认为我可以通过 unicode utf8 修复来纠正这个问题,但事实并非如此...... 我最终使用了mbcs(默认为cp12
我想检测以“HKEY_LOCAL_MACHINE\SOFTWARE\blah\SetupPath”开头的注册表项,如果可能的话读取到 CString。 我在 MSDN 上看到了 RegOpenKeyE
我有一个用 ISO C++ 编写的库。它不使用 Winapi、TCHAR 或类似的东西。我目前正在将其构建为字符集设置为 Unicode 的静态库。我打算将它链接到其他库,其中一些是使用 Unicod
我有一个 MBCS(多字节字符)MFC 应用程序,我从 stdafx.h 文件中删除了 #ifdefs,现在我的 MBCS 应用程序使用公共(public)控件 6。在互联网上我发现很多文章用户说一些
我的问题似乎让人们感到困惑。这是一些具体的东西: 我们的代码执行以下操作: FILE * fout = _tfsopen(_T("丸穴種類.txt"), _T("w"), _SH_DENYNO); _
我正在使用 VS2008 开发一个项目,该项目是在 MBCS 中编译的,但我需要使用一些 UTF-8 字符串来与某些 Web 服务进行交互。我编写了一个函数,它可以完美地与 Unicode 一起工作,
我有一个大型 MFC 应用程序,我正在扩展它以允许多语言输入。目前我需要允许用户在单个对话框的编辑框中输入 Unicode 数据。 有没有办法在不为整个应用程序打开 UNICODE 或 MBCS 的情
我想将我的 visual studio 项目从 MBCS 转换为 Unicode CS。但是我的源代码中有 900 个 const char 数组,有没有自动的方法来做到这一点?一行一行地做很多事情。
我搜索了一下,没有找到太多相关信息。我们需要为编码等提供最通用的支持,并希望确保 ANTLR 能够处理我们扔给它的任何东西。 最佳答案 Java VM 使用 16 位字符编码,因此 MBCS 流在读入
我有一个 vc++ dll,其编译时的字符集设置为“使用 Unicode 字符集”。现在我想在我的 vc++ exe 中使用这个 dll,其字符集是“使用多字节字符集”。我知道理论上没有什么可以阻止我
我正在尝试将包含来自位图文件的数据的 std::string 缓冲区转换为 std::wstring。 我正在使用 MultiByteToWideChar,但这不起作用,因为该函数在遇到第一个 '\0
我正在阅读 Windows 上的字符集和编码。我注意到在 Visual Studio 编译器(用于 C++)中有两个编译器标志,称为 MBCS 和 UNICODE。它们之间有什么区别?我没有得到的是
我有一个遗留应用程序使用 Window 的旧 MBCS。该软件是国际化的,并使用代码页使其适用于其他语言。我读过中文包含多字节字符。我的问题是,哪些以及如何在美国的计算机上生成它们?我需要这个进行测试
我正在使用 Visual C++ (VS2005) 并在多字节字符集 (MBCS) 中编译项目。但是,该程序需要通过 XMLRPC 与 Web 应用程序(使用 utf-8)进行通信。所以我想也许我可以
我使用 Visual Studio 打开了现有的 MFC 项目,并且在构建时收到以下错误消息: Error 1 error MSB8031: Use of MBCS encoding in MFC p
我正在使用一个生成 const char* 类型的以 UTF-8 空字符结尾的字符串的库。示例包括: MIGUEL ANTÓNIO DONA ESTEFÂNIA 我想将这两个 const char
我正在 Linux 上编写一个程序,它必须与现有的 Windows 程序交互。我无法修改 windows 程序的工作方式,但我必须与现有数据集成。该程序将通过 TCP 网络套接字接收原始数据结构。不幸
有人处理过使用 std::string 函数处理 MBCS 吗?例如在 C 中我可以这样做: p = _mbsrchr(path, '\\'); 但在 C++ 中我这样做: found = path.
我是一名优秀的程序员,十分优秀!