std::regex_error语言 - 意外的转义字符
std::regex_error - Unexpected escape character
鉴于此代码有效
std::string pattern = "(\d+)";
std::regex iregex = std::regex(pattern, std::regex_constants::icase);
我收到以下代码的错误
std::string pattern = "(\d+)";
std::regex iregex = std::regex(pattern, std::regex_constants::extended);
有人可以解释一下其中的区别..??
std::regex
可以与或不带有标志一起使用(第二个参数(。 如果没有修改语法的标志:(basic, extended, awk, grep, egrep(,它将默认使用 ECMAScript。 因此,像(icase,nosubs,optimize,collate(这样的标志默认使用ECMAScript语法。
现在问题中的 2 个标志详细介绍
从文档中可以看出,如果您使用std::regex_constants::extended
它将
使用扩展的 POSIX 正则表达式语法语法文档。
在语法文档中,它说:
普通角色是与自身匹配的 ERE。一个平凡的 字符是支持的字符集中的任何字符,但 ERE 特殊字符中列出的 ERE 特殊字符。这 对一个普通角色的解释,前面有一个未逃脱的 ( '' ( 未定义,除非在括号的上下文中 表达式(请参阅 ERE 括号表达式(。
如您所见,d
不在特殊字符列表中。
至于std::regex_constants::icase
:
std::regex(pattern, std::regex_constants::icase)
等同于std::regex(pattern, std::regex::ECMAScript | std::regex::icase)
。
而 ECMAScript 语法接受d
,你必须\d
转义。您可以在此处阅读有关此语法的更多信息。
TL;博士
std::regex_constants::extended
不知道d
,只接受括号([]
(之间的\
。std::regex_constants::icase
接受它,因为它使用std::regex_constants::ECMAScript
语法。
- 为什么当我从 cin 阅读时转义字符不起作用?
- 在QLineEdit中显示和编辑转义字符
- std::regex_error语言 - 意外的转义字符
- LPCWSTR 查找和替换为转义字符
- 修改正则表达式以包含反斜杠和单引号(以便反斜杠表现为转义字符)
- 有人可以解释一下与 Windows 文件系统相关的C++转义字符" "吗?
- 将带有转义字符的大字符串转换为字节数组
- 由转义字符组成的字符串文字的大小
- XOR错误的结果,转义字符
- 在字符串行中查找转义字符
- 以十进制、八进制和十六进制表示法标识整数文本是否与转义字符中的整数文本相同
- C++转义字符和引用变量输出混淆
- 定义 std::字符串 C++不带转义字符
- 正在读取(?)转义字符
- 如何提供转义字符作为命令行参数
- 打印不带转义字符的字符串
- Linux中的转义字符不起作用
- 写入文件时出现意外"random"字符
- 关于转义字符的帮助
- cin.Get带有转义字符