Ontem precisei de verificar se um campo texto estava sendo digitado corretamente conforme uma sintaxe bem parecida com CSV, era para verificar uma lista de extensões de arquivos da seguinte forma ".ext" para uma extensão ".ext,.ext2,.ext3" para mais de uma extensão.
A expressão regular simples seria algo do tipo
.(C|N)
+(,.(C|N)
+)
* onde C=caracteres e N números(0a9)
em ruby a expressão foi muito fácil de ser construida e foi a seguinte
/\.\w+(,\.\w+)*/
\. é o caracter "."
\w qualquer palavra (com ou sem números)
def verifica_texto(txt)
filtro_ext = /\.\w+(,\.\w+)*/
return filtro_ext.match(lista).to_s
end
Se retornar true é que a expressão está correta.
Quando estava escreendo a expressão usei um avaliador de expressões
http://www.rubular.com/Ao escrever a expressão ele avalia os resultados dado o conjunto passado
muito bom mesmo
Listas de elementos usados nas expressões
[] | faixa de caracteres ([a-z] das letras a até z) |
\w | caracteres usados em palavras; mesmo que [0-9A-Za-z_] |
\W | caracteres não usados em palavras
|
\s | espaço; mesmo que [ \t\n\r\f] |
\S | diferente de espaço
|
\d | números, mesmo que [0-9] |
\D | diferente de números
|
\b | backspace (0x08) (usado somente em faixas) |
\b | início ou fim de uma palavra (não usado em faixas) |
\B | diferente de \b
|
* | zero ou mais repetições
|
+ | uma ou mais repetições
|
{m,n} | de m até n repetiçõ
|
? | no máximo uma ocorrência |
| | OU (operador lógico)
|
() | conjunto |
mais exemplos e explicações em:
http://www.rubyist.net/~slagell/ruby/regexp.html