求教: boost 正则问题

graydot 2016-04-17 10:56:51
正则表达式: (?<=\D|^)(1[358]\d{9})(?=\D|$)

1. 如果使用C#,可以正确提取字符串中的电话号码;

2. 使用 boost库,在构造 boost::regex reg( "(?<=\\D|^)(1[358]\\d{9})(?=\\D|$" ); 这句话就挂了。

3. boost默认是perl,如果在构造boost:regex reg时,指定其它的语法,比如basic_syntax_group,
倒是不挂,但是 std::string str("+86 18601234567 tel."); regex_match(str, reg) = false !!

正则表达式和Boost库都不精通,请教大仙?为什么boost不能够处理这个正则?
...全文
100 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
graydot 2016-04-18
  • 打赏
  • 举报
回复
是少一个反括号,写帖子时拷贝程序少拷了。 完整的:
	char pattern[] = {"(?<=\\D|^)(1[358]\\d{9})(?=\\D|$)"};

	boost::regex reg(pattern);

	std::string str("+86 18601234567 tel.");
	smatch cm;
	if (regex_match(str, cm, reg))
	{
		 printf("matched.");

	}
异常消息为: std::string message = "Invalid lookbehind assertion encountered in the regular expression."; 但是C# 中是可以的。
赵4老师 2016-04-18
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
xiaohuh421 2016-04-18
  • 打赏
  • 举报
回复
估计是boots库的bug, 这个正则在其它软件都正常, 就它不正常
iyomumx 2016-04-17
  • 打赏
  • 举报
回复
regex_match 改为 regex_search 另外 boost::regex reg( "(?<=\\D|^)(1[358]\\d{9})(?=\\D|$" ); 这句正则少个反括号
graydot 2016-04-17
  • 打赏
  • 举报
回复
实在没有多少分数,还望各位大仙援手,不胜感激!!!

24,854

社区成员

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

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