私は何年もの間 Perl で正規表現を行ってきましたが、現在は C++ でそれらを利用しようとしています。ただし、いくつかの問題があります。translate(0.0,-572.36218)
などの文字列を解析して、2 つの数値を取得したいと考えています。
これが私がこれまでに持っているものです:
std::cmatch m;
std::regex e("([-|\.|0-9]*),([-|\.|0-9]*)" );
std::regex_search ("translate(0.0,-572.36218)",m,e);
float xTransform = atof(m[1].first);
float yTransform = atof(m[2].first);
ただし、デバッガーで値を見ると、次のように表示されます。
m[0].first = "0.0,-572.36218)"
m[1].first = "0.0,-572.36218)"
m[3].first = "-572.36218)";
正規表現デバッグ ツール (The Regex Coach など) を使用すると、正規表現が構文的に正しいことがわかります。cmatch
これを正しく行っているかどうか、またはインスタンスから必要なデータを抽出する方法がわからないだけだと思います。
更新:正規表現をこれだけに変更すると、本当に何かが足りないに違いありません:
std::regex e("([0-9])");
m は 2 エントリの深さであり、各エントリの最初の要素 = "0.0,-572.36218)" として返されます。これが括弧に一致する理由は私を超えています。そして、 [0-9] は効果がないようです..すべての文字に一致するだけです。とてもイライラします。:(