boost::regx error 请大虾们赐教

littleeagle007 2010-02-24 10:42:58
使用boost库: boost_1_41_0

编译环境WIN32 VS2005


出错:

runtime error: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::regex_error> >

搞了好久没有好办法搞的定,请各位大虾赐教一二,拜谢先。

代码
#include <boost/regex.hpp>
#include <iostream>
boost::regex e("(\\d{3, 4})[- ]?(\\d{4)})[- ]?(\\d{4})[- ]?(\\d{4})");
void print_captures(const std::string& regx, const std::string& text)
{
boost::regex e(regx);
boost::smatch what;
std::cout << "Expression: \"" << regx << "\"\n";
std::cout << "Text: \"" << text << "\"\n";
if (boost::regex_match(text, what, e, boost::match_extra))
{
unsigned i, j;
std::cout << "** Match found **\n Sub-Expressions: \n";
for (i = 0; i < what.size(); ++i)
std::cout << " $" << i << " = \"" << what[i] << "\"\n";
std::cout << " Captures:\n";
for (i = 0; i < what.size(); ++i)
{
std::cout << " $" << i << " = {";
for (j = 0; j < what.captures(i).size(); ++j)
{
if (j)
std::cout << ", ";
else
std::cout << " ";
std::cout << "\"" << what.captures(i)[j] << "\"";
}
std::cout << "}\n";
}
}
else
{
std::cout << "** No match found **\n";
}
}
int main(int , char* [])
{
print_captures("(([[:lower:]]+)|([[:upper:]]+))+", "aBBcccDDDDeeeeeee");
return 0;
}
...全文
215 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
littleeagle007 2012-01-09
  • 打赏
  • 举报
回复
问题搞定, boost 库编译本身存在问题。
赵4老师 2010-02-25
  • 打赏
  • 举报
回复
引用 3 楼 taodm 的回复:
楼主要学会用regex_test这样的工具先验证正则后再使用。

正解
taodm 2010-02-25
  • 打赏
  • 举报
回复
楼主要学会用regex_test这样的工具先验证正则后再使用。
baihacker 2010-02-24
  • 打赏
  • 举报
回复
#include <boost/regex.hpp> 
#include <iostream>

void print_captures(const std::string& regx, const std::string& text)
{ //boost::regex e("(\\d{3, 4})[- ]?(\\d{4)})[- ]?(\\d{4})[- ]?(\\d{4})");
boost::regex e(regx);
boost::smatch what;
std::cout << "Expression: \"" << regx << "\"\n";
std::cout << "Text: \"" << text << "\"\n";
if (boost::regex_match(text, what, e, boost::match_extra))
{
unsigned i, j;
std::cout << "** Match found **\n Sub-Expressions: \n";
for (i = 0; i < what.size(); ++i)
std::cout << " $" << i << " = \"" << what[i] << "\"\n";
std::cout << " Captures:\n";
}
else
{
std::cout << "** No match found **\n";
}
}
int main(int , char* [])
{
print_captures("(([[:lower:]]+)|([[:upper:]]+))+", "aBBcccDDDDeeeeeee");
return 0;
}

Expression: "(([[:lower:]]+)|([[:upper:]]+))+"
Text: "aBBcccDDDDeeeeeee"
** Match found **
Sub-Expressions:
$0 = "aBBcccDDDDeeeeeee"
$1 = "eeeeeee"
$2 = "eeeeeee"
$3 = "DDDD"
Captures:
Press any key to continue
baihacker 2010-02-24
  • 打赏
  • 举报
回复
boost::regex e("(\\d{3, 4})[- ]?(\\d{4)})[- ]?(\\d{4})[- ]?(\\d{4})");
//你的这个正则式有问题:括号不匹配
//所以在构造这个e的时候异常
源码链接: https://pan.quark.cn/s/a4b39357ea24 在C语言编程环境中,多项式求和是一项常见的编程实践,它融合了数学理论、算法设计以及C语言的基础运用。此类程序可能包含对用户输入的多项式表达式进行解析,进而计算各项的总和。接下来将对这一主题进行深入阐述。 多项式在数学领域是一个基础性概念,它由常数、变量及指数通过线性方式组合而成,例如表达式`3x^2 + 2x - 1`。在C语言环境下,我们可以借助数组来表示多项式的各项系数,例如通过定义一个整型数组`int coefficients[] = {3, 2, -1}`来保存表达式`3x^2 + 2x - 1`的系数值。 1. **多项式解析**: 解析多项式的过程通常需要从用户处获取输入数据,如表达式`3x^2 + 2x - 1`。在C语言中,可以利用`scanf()`函数来接收用户的输入。解析流程涉及到识别每个项的系数、变量及指数,这可能需要运用到字符串处理函数,例如使用`strtok()`函数来分割字符串,以及通过`atoi()`或`atof()`函数将字符串转换为数值类型。 2. **数据结构构建**: 为了高效地处理多项式,可以设计一个结构体用以存储每一项的系数和指数信息。例如: ```c typedef struct { int coefficient; int exponent; } Term; ``` 随后,可以选用链表或数组来存储这些结构体实例,以此来完整表示一个多项式。 3. **求和运算**: 求和操作可能包含两个阶段:(1) 对相同指数的项进行系数相加,(2) 将计算结果整合至最终的多项式表达式中。在处理同次幂项时,需要遍历两个多项式,识别出具有相同指数的项...

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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