忽略c ++ 11中的子模式匹配表示法

时间:2013-11-08 23:47:30

标签: regex c++11 ecma262

在第4版C ++编程语言的第1056页,Stroustrup说忽略子模式标记是(?,但在boost::regex中它是(?:。我怀疑Stroustrup可能是错的,有标准副本的人可以说吗?

1 个答案:

答案 0 :(得分:2)

看起来这是书中的拼写错误。 C ++ 11采用ECMA正则表达式语法,即?:创建非捕获组。它说,这些信息实际上不符合c ++标准。

  

由ECMMAcript标志构造的basic_regex对象识别的正则表达式语法是由ECMA-262指定的,除非如下所述。

所以有一些例外,但它们不会影响你的问题。以下是EMCA-262

的引用
  

注1:表格的括号(Disjunction)既可以将Disjunction模式的组件组合在一起,也可以保存匹配的结果。结果可以在反向引用(\后跟非零十进制数)中使用,在替换String中引用,或者从正则表达式匹配内部过程作为数组的一部分返回。要禁止括号的捕获行为,请改为使用表单(?:Disjunction)。