从 .* 的构造函数抛出的 boost 正则表达式异常
Posted
技术标签:
【中文标题】从 .* 的构造函数抛出的 boost 正则表达式异常【英文标题】:boost regex exception thrown from constructor for .*从 .* 的构造函数抛出的 boost 正则表达式异常 【发布时间】:2016-04-14 16:24:02 【问题描述】:Boost 版本 1.60.0 gcc 4.8.4
当我使用字符串构造 boost::regex 对象时:.*
我得到一个异常说明:
what(): Missing in quantified repetition. The error occurred while parsing the regular expresion: '.*>>>HERE>>>'.
当对象是 boost::regex::extended
类型时会出现此错误,但如果是 boost::regex::perl
则不会。
所以下面抛出异常:
regString(".*");
boost::regex reg_e(regString, boost::regex::extended);
但事实并非如此:
regString(".*");
boost::regex reg_p(regString, boost::regex::perl);
这是预期的行为还是错误? 如果是预期的,为什么?什么是合适的解决方法?
【问题讨论】:
【参考方案1】:是一个特殊字符在这种情况下,你需要转义它。
http://www.boost.org/doc/libs/1_60_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html
请注意,“”和“”字符将被视为普通文字 在不重复的上下文中使用时:这匹配 Perl 5.x 行为。例如在表达式“ab1”、“ab1”和“abc”中 大括号都被视为文字,不会出错 提出来。
【讨论】:
啊,我明白这是怎么回事了。为了完整起见,即使正则表达式字符串为.*\
,我也会遇到 boost::regex::basic
类型的相同错误
是的,它有效。我正在为所有 3 种类型(基本、扩展、Perl 兼容)创建正则表达式对象,所以当另一种工作时会失败。我现在分别尝试/捕获每个对象构造,并在一个失败时向用户报告,同时允许其他对象继续。谢谢!以上是关于从 .* 的构造函数抛出的 boost 正则表达式异常的主要内容,如果未能解决你的问题,请参考以下文章