Boost中的正则表达式能支持这种形式吗?

lujun-cc 2008-08-05 11:39:38
想找出insert SQL语句中第N列的列名,
例如:
insert into tablenae (f1,f2,f3) values (v1,v2,v3)
使用下面的表达式
(?<=^\s*insert\s*into\s*\b\w+\b\s*\((\s*\b\w+\b\s*,?){0})\s*\b\w+\b 可以匹配其中的 f1
(?<=^\s*insert\s*into\s*\b\w+\b\s*\((\s*\b\w+\b\s*,?){1})\s*\b\w+\b 就可以匹配到 f2

这是则RegexBuddy中使用JGsoft模式测试过了的,但Boost中的正则表达式默认是Perl语法,好像不支持这种语法,不知道Boost能否支持这种语法?
...全文
72 点赞 收藏 6
写回复
6 条回复
柯本 2008年08月07日
我试了一下,的确有难度,但有一变通方法,就是将结果再处理一下,将后面的,去掉
回复 点赞
lujun-cc 2008年08月06日
恩,顶一下,不过这个表达式有一个小小的缺陷,就是会把后面的逗号也包含进去,我试了几把没能去掉,老大能否再优化一下呢?
回复 点赞
moonwrong 2008年08月06日
支持的,regex下的fbcb6,这个库应该需要单独编译后才能使用。
回复 点赞
expter 2008年08月06日
看看。。。
回复 点赞
柯本 2008年08月06日
boot库的确不支持你的表达式,改一下:
^\s*insert\s*into\s*\b\w+\b\s*\((\s*\b\w+\b\s*,?){1}.* //可以匹配其中的 f1,
^\s*insert\s*into\s*\b\w+\b\s*\((\s*\b\w+\b\s*,?){2}.* //可以匹配其中的 f2,
回复 点赞
mniwjb 2008年08月06日
[Quote=引用 1 楼 moonwrong 的回复:]
支持的,regex下的fbcb6,这个库应该需要单独编译后才能使用。
[/Quote]
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告