std::regex_constants:: syntax_option_type
|
定义于头文件
<regex>
|
||
|
using
syntax_option_type
=
/* 由实现定义 */
;
|
(1) | (C++11 起) |
|
constexpr
syntax_option_type icase
=
/* 未指定 */
;
constexpr
syntax_option_type nosubs
=
/* 未指定 */
;
|
(2) |
(C++11 起)
(C++17 起为内联) |
|
inline
constexpr
syntax_option_type multiline
=
/* 未指定 */
;
|
(3) | (C++17 起) |
目录 |
常量
| 语法选项 | 作用 |
ECMAScript
|
使用 改进的ECMAScript正则表达式语法 。 |
basic
|
使用基本POSIX正则表达式语法( 语法文档 )。 |
extended
|
使用扩展POSIX正则表达式语法( 语法文档 )。 |
awk
|
使用POSIX中 awk 工具采用的正则表达式语法( 语法文档 )。 |
grep
|
使用POSIX中
grep
工具采用的正则表达式语法。这实际上等同于
basic
选项,但增加了换行符
'
\n
'
作为候选项分隔符。
|
egrep
|
使用POSIX中带
-E
选项的
grep
工具采用的正则表达式语法。这实际上等同于
extended
选项,但除了
'|'
外,还增加了换行符
'
\n
'
作为候选项分隔符。
|
| 语法变体 | 作用 |
icase
|
执行字符匹配时应忽略大小写。 |
nosubs
|
执行匹配时,所有标记子表达式
(
expr
)
均被视为非标记子表达式
(?:
expr
)
。匹配结果不会存储在提供的
std::regex_match
结构中,且
mark_count()
为零。
|
optimize
|
指示正则表达式引擎优化匹配速度,可能以增加构造时间为代价。例如,这可能意味着将非确定性FSA转换为确定性FSA。 |
collate
|
形式为 "[a-b]" 的字符范围将具有区域设置敏感性。 |
multiline
(C++17)
|
若选择ECMAScript引擎,指定
^
应匹配行首,
$
应匹配行尾。
|
在
ECMAScript
、
basic
、
extended
、
awk
、
grep
、
egrep
中最多只能选择一个语法选项。若未选择任何语法,则默认选中
ECMAScript
。其他选项作为变体存在,例如
std::
regex
(
"meow"
, std
::
regex
::
icase
)
等价于
std::
regex
(
"meow"
, std
::
regex
::
ECMAScript
|
std
::
regex
::
icase
)
。
注释
由于POSIX采用"最左最长"匹配规则(匹配最长的子序列,当存在多个这样的子序列时匹配第一个),它不适用于例如解析标记语言:像 "<tag[^>]*>.*</tag>" 这样的POSIX正则表达式会匹配从第一个 "<tag" 到最后一个 "</tag>" 之间的所有内容,包括中间所有的 "</tag>" 和 "<tag>" 。另一方面,ECMAScript支持非贪婪匹配,ECMAScript正则表达式 "<tag[^>]*>.*?</tag>" 只会匹配到第一个结束标签。
示例
演示ECMAScript与POSIX正则表达式在匹配算法上的差异:
#include <iostream> #include <regex> #include <string> int main() { std::string str = "zzxayyzz"; std::regex re1(".*(a|xayy)"); // ECMA std::regex re2(".*(a|xayy)", std::regex::extended); // POSIX std::cout << "Searching for .*(a|xayy) in zzxayyzz:\n"; std::smatch m; std::regex_search(str, m, re1); std::cout << " ECMA (depth first search) match: " << m[0] << '\n'; std::regex_search(str, m, re2); std::cout << " POSIX (leftmost longest) match: " << m[0] << '\n'; }
输出:
Searching for .*(a|xayy) in zzxayyzz: ECMA (depth first search) match: zzxa POSIX (leftmost longest) match: zzxayy
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 2053 | C++11 | 常量被声明为 static | 移除了 static 说明符 |
参见
|
(C++11)
|
正则表达式对象
(类模板) |