下面是使用正则表达式匹配字符串但不起作用的C ++程序。我的操作系统是Ubuntu Linux,编译器是ubuntu附带的标准C ++编译器。
#include <iostream>
#include <regex>
using namespace std;
int main() {
const char s[] = "This is a target string";
regex e ("^([0-9a-zA-Z]*).*?");
cmatch matches;
if(regex_match(s, matches, e)) {
cout << "Match found" << endl;
for (int i = 0; i < matches.size(); ++i) {
cout << matches[i] << endl;
}
}
return 0;
}
使用下面的g ++进行编译
g++ -o test test.cpp -std=c++11
使用以下输出
运行程序失败terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
[1] 24898 abort (core dumped) ./test
模式工作正常,我在rubular.com
中尝试过。我希望它能够打印
Match Found
This is a target string
This
我不熟悉在C ++中使用正则表达式。请指出我正确的方向。
答案 0 :(得分:0)
你可以使用try / catch并捕获regex_error并打印e.what()以了解出了什么问题。
顺便说一句,它与我的gcc与c ++ 11标志完美配合
catch (const std::regex_error& e) {
std::cout << "regex_error caught: " << e.what() << '\n';
if (e.code() == std::regex_constants::error_brack) {
std::cout << "The code was error_brack\n";
}
}