如何解决C ++正则表达式错误!方括号表达式不适用于icase标志
// regex_replace example
#include <iostream>
#include <string>
#include <regex>
#include <iterator>
int main ()
{
std::string INPUT = "Replace_All_Characters_With_Anything";
std::string OUTEXP = "0";
std::regex expression("[A-Za-z]",std::regex_constants::icase);
std::cout << std::regex_replace(INPUT,expression,OUTEXP);
return 0;
}
这在这里起作用:http://cpp.sh/6gb5a 在这里有效:https://regexr.com/5bt9d
问题似乎归结于是否使用icase标志。由于存在下划线,因此“ A”,“ C”,“ W”,“ W”等都不会被替换。该错误似乎是使用[]
进行匹配的情况只有在所说字符不在非匹配之后才有效。
似乎确实可以快速解决此问题,如果方括号后跟{1},则可以正常工作。
示例:[A-Za-z]{1}
编译器: Microsoft Visual Studio社区2019 /版本16.7.3 / c ++ 17
也在c ++ 14中测试,同样的不良行为
解决方法
不确定这是否适合回答。但这是一个已知的错误,看来该错误已被发现了几个月。据我所知,没有关于修复的ETA。
https://github.com/microsoft/STL/issues/993
看起来RE2是一个推荐的正则表达式库。
https://github.com/google/re2/
代替使用另一个库,我将创建一个函数,该函数可用于拦截和更改regex表达式字符串作为临时解决方案。无论是否使用icase标志都应该起作用。
测试代码:https://rextester.com/LSNW3495
false
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。