我正在使用Visual Studio 2010.这......
std::regex pattern("(?i).*a.*");
...抛出这个......
std::tr1::regex_error - regular expression error
...我找不到任何说明std::regex
是否支持不区分大小写的(?i)
语法的内容。
任何人都可以确认/拒绝(?i)
不支持std::regex
作为不区分大小写的前缀吗?
答案 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)。