CPP 中的正则表达式问题
Issues with regex in CPP
我在正则表达式和C++方面遇到了一些问题。我的问题是,使用相同的表达式,一些应该匹配的字符串却不匹配。
RX: ([[:alpha:]][^[:digit:]|_][[:digit:]])
INPUT: a&3
REGEX not MATCH
RX: ([[:alpha:]][^[:digit:]|_][[:digit:]])
INPUT: u#5
REGEX not MATCH
RX: ([[:alpha:]][^[:digit:]|_][[:digit:]])
INPUT: o@9
REGEX MATCH
有人可以解释我做错了什么吗?
我使用的代码是这样的:
bool parse(string &in){
string st;
try{
st = remove_beginning_whites(in);
}catch (const std::invalid_argument& e) {
return false;
}
//if (st!="") cout << st;
try{
char rx[]={"([[:alpha:]][^[:digit:]|_][[:digit:]])"};
cout << "RX: "<< rx<<'n'<<"INPUT: "<<in<<"n";
regex my_RX (rx);
if (regex_match(in,my_RX))
cout<<"REGEX MATCHnn";
else
cout<<"REGEX not MATCHnn";
} catch (std::regex_error& e) {
cerr<<e.code()<<'t';
cerr<<e.what()<<"nn";
}
return true;
}
这是"remove_beginning_whites"功能:
string remove_beginning_whites(string& in){
auto pos = in.find_first_not_of(" nrt");
if(pos==string::npos) {
throw std::invalid_argument("empty string");
}
else {
return in.substr(pos);
}
}
我还想知道"[[ ]]"和"[ ]"之间有什么区别
您确认某些字符串以 CR(回车符)结尾。由于regex_match
需要完整的字符串匹配,因此您的正则表达式无法工作,因为它们与跟踪 CR 符号不匹配。
作为解决方法,您只需在模式末尾添加一个可选r?
:
char rx[]={"([[:alpha:]][^[:digit:]_][[:digit:]])r?"};
?
修饰符匹配量化子模式的 1 次或 0 次出现。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- C++中的正则表达式存在问题
- CPP 中的正则表达式问题
- 这种使用增强正则表达式库有什么问题
- regex_error。我的正则表达式有什么问题
- #include < regex.h> 用于创建正确正则表达式的问题
- gcc 4.8或更早版本对正则表达式有问题吗
- C++中正则表达式的问题
- C++ MFC 正则表达式问题
- 正则表达式 POSIX 字符类C++问题
- 提升::正则表达式性能问题
- VS10 中文件名的正则表达式格式有什么问题<regex>?
- 使用boost::regex的正则表达式问题
- c++ STD正则表达式问号问题
- 使用增强正则表达式库编译程序时遇到问题
- 我的正则表达式代码有什么问题?