1

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

4

1 回答 1

2

好像是书上的错别字。C++11 采用 ECMA 正则表达式语法,表示?:创建一个非捕获组。它说,这些信息实际上不在 c++ 标准中。

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

所以有一些例外,但它们不会影响您的问题。这是来自EMCA-262的引述

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

于 2013-11-09T00:00:57.403 回答