boost :: regexについていくつか質問があります:私は以下の例を試しました。Regexが結果を返さない
1)sregex_token_iteratorの第4パラメタは何ですか?それは "デフォルトマッチ"のように聞こえましたが、何も返さないのではなく、なぜそれを望むでしょうか?私は4番目のパラメータなしでそれを試しましたが、コンパイルされません。
2)私は出力を取得しています: (1、0) (0、0) (3、0) (0、0) (5、0)
誰が何を説明することができますうまくいかない?
#include <iostream>
#include <sstream>
#include <vector>
#include <boost/regex.hpp>
// This example extracts X and Y from (X , Y), (X,Y), (X, Y), etc.
struct Point
{
int X;
int Y;
Point(int x, int y): X(x), Y(y){}
};
typedef std::vector<Point> Polygon;
int main()
{
Polygon poly;
std::string s = "Polygon: (1.1,2.2), (3, 4), (5,6)";
std::string floatRegEx = "[0-9]*\\.?[0-9]*"; // zero or more numerical characters as you want, then an optional '.', then zero or more numerical characters.
// The \\. is for \. because the first \ is the c++ escpape character and the second \ is the regex escape character
//const boost::regex r("(\\d+),(\\d+)");
const boost::regex r("(\\s*" + floatRegEx + "\\s*,\\s*" + floatRegEx + "\\s*)");
// \s is white space. We want this to allow (2,3) as well as (2, 3) or (2 , 3) etc.
const boost::sregex_token_iterator end;
std::vector<int> v; // This type has nothing to do with the type of objects you will be extracting
v.push_back(1);
v.push_back(2);
for (boost::sregex_token_iterator i(s.begin(), s.end(), r, v); i != end;)
{
std::stringstream ssX;
ssX << (*i).str();
float x;
ssX >> x;
++i;
std::stringstream ssY;
ssY << (*i).str();
float y;
ssY >> y;
++i;
poly.push_back(Point(x, y));
}
for(size_t i = 0; i < poly.size(); ++i)
{
std::cout << "(" << poly[i].X << ", " << poly[i].Y << ")" << std::endl;
}
std::cout << std::endl;
return 0;
}
あなたはlibpcreを試してみましたか? –
私はこれ以上の依存関係を導入したくありません。 –