如何使用正则表达式,获得多个匹配结果

flyRaccoon 2004-08-07 03:27:31
match_results results;
string str( "The book cost $12.34" );
rpattern pat( "cost \\$(\\d+)(\\.(\\d\\d))?" );

// Match a dollar sign followed by one or more digits,
// optionally followed by a period and two more digits.
// The double-escapes are necessary to satisfy the compiler.
match_results::backref_type br = pat.match( str, results );
if( br.matched ) {
cout << "match success!" << endl;
cout << "price: " << br << endl;
} else {
cout << "match failed!" << endl;
}
这是标准例子,如果str包含多个匹配结果,如何得到,显示出来
...全文
1016 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
rorot 2004-08-09
  • 打赏
  • 举报
回复
try to use pat( "const ([^;]*)" )
wuxiao2004 2004-08-09
  • 打赏
  • 举报
回复
source = "The book cost $23,123,212.34";
patten = "\\$(\\d+\\,)*(\\d+)(\\.(\\d\\d))?";

$23,123,212.34

The group[0] is $23,123,212.34
The group[1] is 123,
The group[2] is 212
The group[3] is .34
The group[4] is 34

是否需要得到类似上面的结果?如果是的话,我帮你看看我以前写的代码
Jinhao 2004-08-09
  • 打赏
  • 举报
回复
微软的,不了解
flyRaccoon 2004-08-09
  • 打赏
  • 举报
回复
谢谢 wuxiao2004(不知道) 和其他参与者
如果没有其他看法,稍后结贴
wuxiao2004 2004-08-09
  • 打赏
  • 举报
回复
GRETA好象没有直接提供这样的功能,不过你可以自己通过使用字符串的偏移指针进行再次的匹配。

GRETA提供了match_results::rstart和match_results::rlength函数,前者返回匹配字符串在源字符串中的首位置,后一个函数(默认条件下)返回匹配字符串的长度,这两个函数在GRETA附带的帮助里都有说明。你可以做一个循环,将指向源字符串的指针在每次匹配之后向后移动match_results::rstart+match_results::rlength个长度,让他从新的位置开始新的匹配,直到找不到匹配字符串为止……
flyRaccoon 2004-08-09
  • 打赏
  • 举报
回复
我希望的能做到的是
source="book1 cost $12.1;book2 cost $13.12;book3 cost $14.1"
rpattern pat( "cost \\$(\\d+)(\\.(\\d\\d))?" );

匹配后能得到
The group[0] is $12.1
The group[1] is $13.12
The group[2] is $14.1



flyRaccoon 2004-08-08
  • 打赏
  • 举报
回复
用的是GRETA
资料来源于
http://www.vckbase.com/document/viewdoc/?id=1138
有没有了解这方面的朋友,指教一下
CQZE 2004-08-07
  • 打赏
  • 举报
回复
楼主用的玩意好象叫 regexpr
CQZE 2004-08-07
  • 打赏
  • 举报
回复
是boost库??
boost::match_results 是个模板
boost::rpattern,有这个东西吗?
kaphoon 2004-08-07
  • 打赏
  • 举报
回复
妈的,这是boost库
去msdn找什么啊~
hewittlee 2004-08-07
  • 打赏
  • 举报
回复
msdn找!
flyRaccoon 2004-08-07
  • 打赏
  • 举报
回复
我没找到相关的文档,给个联结吧
shen13 2004-08-07
  • 打赏
  • 举报
回复
你好像用的是Microsoft的吧
 它的文档中有说明的呀
------------------------------------
体验速度,体验CSDN新版论坛助手:http://community.csdn.net/Expert/TopicView.asp?id=3108679
CQZE 2004-08-07
  • 打赏
  • 举报
回复
你这是什么库?如果是boost,我还可以帮你一下

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧