std :: regex是否支持"(?i)"不区分大小写?

时间:2014-07-14 19:56:15

标签: c++ regex

我正在使用Visual Studio 2010.这......

std::regex pattern("(?i).*a.*");

...抛出这个......

std::tr1::regex_error - regular expression error

...我找不到任何说明std::regex是否支持不区分大小写的(?i)语法的内容。

任何人都可以确认/拒绝(?i)不支持std::regex作为不区分大小写的前缀吗?

2 个答案:

答案 0 :(得分:16)

标准只要求符合POSIX正则表达式语法(不包括像这样的Perl扩展)和ECMAScript正则表达式规范的一致性(根据ISO14882-2011§28.13有少量例外),这是描述的在ECMA-262,§15.10.2中。 ECMAScript的正则表达式语法包含(?)语法形式的修饰符的使用,因此,扩展,C ++ 11/14也没有,TR1的大多数实现也没有

这并不妨碍您的标准库实现更多的PCRE扩展,但标准并不要求它,因此根本无法保证。

所以,不,它不受支持,本身。

但是,您可以按如下方式声明正则表达式:

std::regex pattern(".*a.*", std::regex_constants::icase);

这将声明您的模式不区分大小写。

答案 1 :(得分:0)

boost::regex支持Perl语法,该语法具有(?i)。