Fiz alguns algoritmos de expressões regulares para containers
genéricos.
Quem quiser dar uma olhada: (ainda está em testes)
http://www.thradams.com/codeblog/pattern.htm
É montada uma expressão em tempo de compilação e depois a expressão é
avaliada com a função Find.
O objetivo era usar em um tokenizer (wchar_t e char), mas não existe
razão para não ser genérico. (Aliás, não conheço libs de regex que
sejam genéricas da mesma forma.)
Então por exemplo é possível fazer o seguinte: (só por curiosiade) :)
vector<int> v; // {1 2 3 );
it = Find(v.begin(), v.end(), !Val(2) ^ ZeroOrMore);
A expressão !Val(2) ^ ZeroOrMore é equivalente a [^2]*
Ou seja, andar enquanto não for 2.
E a consequência é achar o 2. Ou um find por 2 sem ter lambdas ou o
conceito de "_1" argumento.
Também pode ser usada para strings:
// [0-9]+ ('.' [0-9]+)?
ss = L"123.45";
std::wstring::iterator it = Find(ss.begin(), ss.end(),
(Range(L'0', L'9') ^
OneOrMore) & ( L'.' & Range(L'0', L'9') ^ OneOrMore) ^ Optional);