Expressões regulares em containers

2 views
Skip to first unread message

Thiago Adams

unread,
Oct 6, 2009, 9:43:42 AM10/6/09
to 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)

unread,
Oct 6, 2009, 9:57:38 AM10/6/09
to 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/
Reply all
Reply to author
Forward
0 new messages