微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则expression式分组与C ++ 11正则expression式库匹配

我正在尝试使用正则expression式进行组匹配。 我想从一个大string中提取两个string。

inputstring如下所示:

tХB:[email protected] Connected tХB:[email protected] WEBMSG #Username :this is a message tХB:[email protected] Status: visible

Username可以是任何东西。 this is a message的最后部分。

我想要做的是提取井号#后面的用户名 。 不是从string中的任何其他地方,因为它可以改变。 我也想从分号后面的string中得到消息 : 。

如何根据开始和结束位置来查找和replacestring

在bash中声明一个awk函数

batch file集/ pexpression式

Linux CLI更改价格(awk或sed?)

bash正则expression式在linux上工作,但不是solaris

我试图用下面的正则expression式。 但它从来没有输出任何结果。

regex rgx("WEBMSG #([a-zA-Z0-9]) :(.*?)"); smatch matches; for(size_t i=0; i<matches.size(); ++i) { cout << "MATCH: " << matches[i] << endl; }

我没有得到任何比赛。 我的正则expression式有什么问题?

名称不包含某些单词时删除文件

有没有办法将date转换为Perl 5.8之前的时代?

Perl正则expression式 d +和运算符在字母数字string中只显示一位数字

Sed:如何replace特定模式位于文件中后发现的string

如何将多个文件名中的零件从1更改为01?

您的正则表达式不正确,因为这两个捕获组都不做你想要的。 首先是匹配从集合[a-zA-Z0-9]后跟<space>:的单个字符,它适用于单个字符用户名,但没有别的。 第二个捕获组将始终为空,因为您正在查找零个或多个字符,而且指定匹配不应该是贪婪的,这意味着零个字符匹配是一个有效的结果。

解决这两个你的regex成为

std::regex rgx("WEBMSG #([a-zA-Z0-9]+) :(.*)");

但是简单地实例化一个regex和一个match_results对象不会产生匹配,你需要应用一个regex算法。 既然你只想匹配输入字符串的一部分,在这种情况下使用适当的算法是regex_search 。

std::regex_search(s,matches,rgx);

把它放在一起

std::string s{R"( tХB:[email protected] Connected tХB:[email protected] WEBMSG #Username :this is a message tХB:[email protected] Status: visible )"}; std::regex rgx("WEBMSG #([a-zA-Z0-9]+) :(.*)"); std::smatch matches; if(std::regex_search(s,rgx)) { std::cout << "Match foundn"; for (size_t i = 0; i < matches.size(); ++i) { std::cout << i << ": '" << matches[i].str() << "'n"; } } else { std::cout << "Match not foundn"; }

现场演示

"WEBMSG #([a-zA-Z0-9]) :(.*?)" :这个正则表达式只会匹配包含1个字符长度的用户名和分号后的任何消息的字符串,而第二个组将总是空的,因为试图找到任何字符从0到无限的非贪婪匹配。

"WEBMSG #([a-zA-Z0-9]+) :(.*)"应该工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐