c++ - 如何将 std::regex_match 与 CString 一起使用?

标签 c++ regex mfc

当我尝试将 std::regex 与 CString (MFC) 一起使用时,出现此错误:

enter image description here

这是代码:

const std::regex pattern("^[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]$");

const CString& csTest = "28.10.1991";

if (std::regex_match(csTest, pattern))

最佳答案

没有将 CString 明确转换为任何 std::regex_match 重载的第一个参数。

添加 GetString() 以显式转换为 const TCHAR*:

std::regex_match(csTest.GetString(), pattern)

或者,如果您想使用迭代器范围(这可能是微优化),请另外使用 GetLength():

std::regex_match(csTest.GetString(), csTest.GetString() + csTest.GetLength(), pattern)

一条评论建议使用CAtlRegExp。您也可以这样做,但请注意 CAtlRegExp 具有非标准语法,并且它还有一些错误,甚至不再是 Visual Studio 附带的 ATL 的一部分(“ATL 服务器”的一部分)从 Visual Studio 2008 开始,它与 ATL 是分开的)。所以我不会使用 CAtlRegExp

关于c++ - 如何将 std::regex_match 与 CString 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61352173/

相关文章:

c++ - CPPPATH 似乎不适用于 scons?

python - 正则表达式查找字符串中两个标记之间的位置

javascript - 替换数据 block 中的多个模式

c++ - 使用 SS_OWNERDRAW 动态创建 CStatic 时程序在 UpdateWindow 上崩溃

c++ - 重定向 MFC GUI 应用程序中使用的 c++ dll 的控制台输出

c++ - CRTP:从基调用派生类模板化方法

c++ - Windows 上的文件处理例程

C++括号匹配应用

regex - Url Rewrite HTTPS -> HTTP 特定页面除外 (IIS 7)

visual-c++ - 如何在添加到MFC Doc/Frame项目的对话框中为“编辑控制框”设置默认值