首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >表达式包含无效的归类元素名称

表达式包含无效的归类元素名称
EN

Stack Overflow用户
提问于 2019-08-29 00:13:35
回答 2查看 55关注 0票数 0

使用下面的表达式创建了我的reg对象:

代码语言:javascript
运行
复制
std::string regE("\\s*[0-9A-Za-z_.]+\\s*=\\s*[a-zA-Z0-9._()\\s-,/*+!~\"'?<>\\[\\]{}|^%$#@]+");
std::regex r(regE);    

并且我在运行时得到了下面的异常:

表达式包含无效的归类元素名称

在引发'std::__1::regex_error‘what()的实例后调用terminate :表达式包含无效的排序元素名称。

EN

回答 2

Stack Overflow用户

发布于 2019-08-29 01:47:00

这个错误是从这里开始的:

代码语言:javascript
运行
复制
\\s*[0-9A-Za-z_.]+\\s*=\\s*[a-zA-Z0-9._()\\s-,/*+!~\"'?<>\\[\\]{}|^%$#@]+
                                           ~^~

破折号字符-在括号表达式中具有特殊含义,即它指定一个字符范围。因为没有[\\s-,]这样的范围,即从\s开始到,结束,所以会报告一个错误。

为了从字面上解析-,它必须位于字符序列的开头(不包括^求反运算符),或者位于末尾,或者使用\进行转义。

还要注意,C++支持原始字符串文字,可用于避免转义字符,从而使正则表达式更具可读性。话虽如此,正确和简化的正则表达式可以是:

代码语言:javascript
运行
复制
std::regex r(R"(\s*[0-9A-Za-z_.]+\s*=\s*[a-zA-Z0-9._()\s\-,/*+!~"'?<>\[\]{}|^%$#@]+)");
票数 0
EN

Stack Overflow用户

发布于 2019-09-04 23:32:19

在我的表达式中,我犯了两个错误:

1) \s*0-9A-Za-z_.+\s*=\s*[a-zA-Z0-9._()\s-

代码语言:javascript
运行
复制
 the last '-'  Character range is out of order

2) /*+!~\"'?<>[]{}|^%$#@]+

代码语言:javascript
运行
复制
 the first '/' character is an unescaped delimiter so it must be escaped with a backslash (\)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57696435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档