gpt4 book ai didi

c++ - 如何使用 std::regex_search 的结果?

转载 作者:行者123 更新时间:2023-11-30 04:47:07 25 4
gpt4 key购买 nike

我只是打电话

std::smatch m;
if (std::regex_search
(std::string (strT.GetString ()),
m,
std::regex ("((\\d[\\s_\\-.]*){10,13})")))
{
...
}

我这辈子都想不出如何从 m 中提取匹配的值。

关于该主题的每一页都将其写入 cout,这对我来说毫无值(value)。我只想获取字符串中捕获的内容,但无论我尝试什么,它都会崩溃并显示“字符串迭代器不兼容”错误消息。

好吧,我尝试了更多的东西,但对更多的东西感到恼火,最明显的是相同的代码在在线测试器中如何工作,但在我的电脑上却不行。我已经归结为这个

std::string s (strT.GetString ()) ;
std::smatch m;
if (std::regex_search (
s,
m,
std::regex ("((\\d[\\s_\\-.]*){10,13})")))
{
std::string v = m[ 0 ] ;
}

工作,但是这个

std::smatch m;
if (std::regex_search (
std::string (strT.GetString ()),
m,
std::regex ("((\\d[\\s_\\-.]*){10,13})")))
{
std::string v = m[ 0 ] ;
}

由于某种原因不工作(不兼容的字符串迭代器错误)。它肯定有一些技巧。我会让知道的人解释一下。

最佳答案

您是正确的,您可以将匹配分配给 std::string;您没有使用流插入功能。

但是,您的第三个示例崩溃了,因为 std::smatch 持有对原始源数据中位置的引用/句柄……在您崩溃的情况下是临时的 strT.GetString() 正则表达式一完成就超出范围(阅读 here )。

你的第二个例子是正确的。

我承认 C++ 正则表达式的实现乍一看并不完全直观。

关于c++ - 如何使用 std::regex_search 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56366339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com