【发布时间】:2019-10-15 09:45:37
【问题描述】:
我只是在打电话
std::smatch m;
if (std::regex_search
(std::string (strT.GetString ()),
m,
std::regex ("((\\d[\\s_\\-.]*){10,13})")))
{
...
}
我这辈子都不知道如何从 m 中提取匹配的值。
该主题的每一页都将其写入 cout,这对我来说毫无价值。我只想获取字符串中捕获的内容,但无论我尝试什么,它都会因“字符串迭代器不兼容”错误消息而崩溃。
好的,所以我又尝试了一些东西,但又对更多事情感到恼火,最明显的是相同代码在在线测试人员中的工作方式,但在我的计算机上却没有。我已经明白了
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 ] ;
}
由于某种原因无法工作(带有不兼容的字符串迭代器错误)。 这肯定有什么诀窍。我让知道的人解释一下。
【问题讨论】:
-
您只是想知道字符串是否与正则表达式匹配,还是想使用正则表达式搜索项目?
-
使用
sregex_token_iterator或sregex_iterator。也修复你的正则表达式,但这不是当前的问题。 -
我的模式完全符合我的需要,非常感谢。我不明白如何在
std::smatch m;var 中“读取”我的捕获。 -
@LightnessRacesinOrbit 似乎很可能。您可以将其写在答案中以便我接受吗?也可以通过放置
GetBuffer()而不是GetString()来工作吗?虽然我可以看到必要性,但我不喜欢在一行中使用整个变量。 -
是的,我认为这不是一个有用的骗局。重新打开并回答。