如何使用 c++11 的正则表达式来匹配一些通用字节?
How I can use c++11's regex for matching some generic bytes?
我需要这样做:
const regex setData("^(setDataArray:)[\x00-\xFF]{8,8}$");
换句话说,我需要识别一个字符串,后跟一些通用字节(它是一个互联网协议),但它在运行时,在编译对象期间给我一个错误。我认为原因是我不能只使用 8 位字符。有办法解决它吗?
编辑:正如建议的那样,我附加了一个简单的程序来解释这个问题:
#include <regex>
using namespace std;
const regex setData("^(setDataArray:)[\x00-\xFF]{8,8}$");
int main()
{
return EXIT_SUCCESS;
}
该程序在 Windows 8.1 上使用 Visual Studio 2013 编译时在第 3 行崩溃
我相信
这会起作用:
const regex setData(R"(^(setDataArray:)[x00-xFF]{8,8}$)",
std::regex_constants::basic);
我将语法更改为使用 Raw 字符串常量(R"( ... )"
语法),以避免转义斜杠字符并使其更易于阅读,但这只是为了让它更漂亮。
随之而来的变化是添加了std::regex_constants::basic
导致正则表达式使用基本的 Posix 语法而不是默认的 ECMAScript 语法。 在这种情况下,使用 ECMAScript 版本应该没有问题,但我怀疑 Microsoft 的实现可能存在问题。
标准 ECMAScript 语法与 C++11 中使用的略微修改的版本之间存在细微差别。 特别是字符范围[B-E]
形式不是原始 ECMAScript 语法的一部分,而是指定为 C++11 中使用的 ECMAScript 语法的一部分。
您可以在以下位置阅读有关各种语法及其提供的内容的更多信息cppreference.com
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- MSVC是否支持C++11样式的属性而不是__declspec
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 继承:构造函数,初始化C++11中基类的类C数组成员
- std::当在256字节边界上写入整数时,流的奇怪行为
- 当比特(而不是字节)的顺序至关重要时的持久性
- 如何将模板转换为C++11之前的模板
- c++11评估顺序(未定义的行为)
- C++11:16 字节原子<>变量是否在 16 字节边界上自动对齐,从而允许CMPXCHG16B指令?
- 在 c++11 中生成随机字节
- 如何将元组转换为C 11中的字节数组
- 在c++ 11/14中有效地生成随机数据字节
- c++ 11中类型的字节对字节拷贝
- 最语义正确和类型安全的构造从序列化字节数组?(c++ 11)
- DirectX 11追加缓冲区字节宽度
- 如何使用 c++11 的正则表达式来匹配一些通用字节?