C++无符号字符串类型的正则表达式
C++ regex for unsigned string type
Visual C++ 2017: 我使用无符号字符串:
typedef basic_string<unsigned char> ustring;
这工作正常,但是当我尝试以与编译相同的方式使用正则表达式时,会抛出很多我不明白的错误:
#include <regex>
using namespace std;
typedef basic_regex<unsigned char> uregex;
int main()
{
uregex ur;
}
我得到
error C2027: use of undefined type 'std::regex_traits<unsigned char>'
我怀疑regex_traits需要一个 typedef,但我不知道如何定义它。
basic_regex
的定义如下:([re.regex])
template <class CharT, class Traits = regex_traits<CharT>>
class basic_regex;
在这里,您实例化regex_traits<unsigned char>
. 根据 [re.traits]/1:
专业
regex_traits<char>
和regex_traits<wchar_t>
应有效并符合 正则表达式特征类的要求 ([re.req])。
换句话说,regex_traits<unsigned char>
可能有效,也可能无效。 您的实现似乎没有提供这样的定义。 顺便说一下,代码在GCC上编译得很好,但在Clang上不能。
没有可移植的方法可以将basic_regex
与unsigned char
一起使用,基于以下证明。
证明:假设,为了矛盾起见,我们使用
basic_regex<unsigned char, Traits>
,其中Traits
是一个正则表达式特征([re.req])。 那么Traits::string_type
是basic_string<unsigned char>
([tab:re.req]),相当于basic_string<unsigned char, char_traits<unsigned char>>
。 但是,char_traits<unsigned char>
不能保证可用([char.traits.specializations]),并且不允许我们提供自己的显式专用化,因为unsigned char
不是程序定义的类型([namespace.std]),因此没有可移植的方式来使用char_traits<unsigned char>
。 这种矛盾表明,我们最初的假设是错误的。 因此,我们已经表明,没有便携式方法可以将basic_regex
与unsigned char
一起使用。
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- C++无符号字符串类型的正则表达式
- Qt - 在没有正则表达式的情况下,将 QString 拆分为几种类型的空格
- 正则表达式:获取 CPP 函数 (c#) 的单独参数和参数类型
- 每个类型匹配一个或多个字符的正则表达式
- 自定义类型的正则表达式