Expressões regulares em containers

2 visualizações
Pular para a primeira mensagem não lida

Thiago Adams

não lida,
6 de out. de 2009, 09:43:4206/10/2009
para ccppbrasil

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);


Rodrigo (skhaz)

não lida,
6 de out. de 2009, 09:57:3806/10/2009
para ccppb...@googlegroups.com
Olá,

ficou muito legal!
sugestão: talvez substituir Range pelo operador "[]"


2009/10/6 Thiago Adams <thiago...@gmail.com>



--
http://www.wintermoonframework.org/
Responder a todos
Responder ao autor
Encaminhar
0 nova mensagem