以下は正規表現を使って文字列にマッチするが動作していないC++プログラムです。私のOSはUbuntu Linuxで、コンパイラは標準のC++コンパイラで、ubuntuに付属しています。以下のC++の正規表現は機能しません。なぜ説明できますか?
g++ -o test test.cpp -std=c++11
以下のように++グラムを使用してコンパイルし、プログラムを実行する上で
#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;
}
は、パターンが正常に動作していると私はrubular.com
.Iでそれを試してみまし出力以下
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
[1] 24898 abort (core dumped) ./test
で失敗していますそれを印刷することを期待しています
Match Found
This is a target string
This
C++で正規表現を初めて使用しています。正しい方向に私を指差してください。
コンパイラバージョンGCC 4.8のですか? (Ubuntu 14.04のデフォルトです) –
私は再現できませんが、文字列の最後に疑問符を含めるつもりでしたか?通常、 '? 'は特殊文字ですが、'。* 'はすでに0以上の値にマッチしているので、何にも当てはまりません。だから、文字列 '? 'にマッチすると解釈されると思いますが、あまり定義されていない可能性があります。 – happydave
試してみてください:' g ++ --version'そしてバージョンが 'GCC 4.9'より小さければ正規表現は機能しません。コンパイラをアップグレードする必要があります。 – Galik