Expressão regular em Java ME
Dados do artigo
Artigo
Este artigo visa demonstrar o uso das expressões regulares em diferentes entradas de texto fornecidas pelos usuários. Você pode utilizá-las para, por exemplo, bloquear caracteres de entrada, tais como !@#$%¨&*( ou mesmo para validar entradas de dados como um telefone, um nome, etc.
Contents |
O que são Expressões Regulares?
Expressões regulares é um método formal para se especificar um padrões de texto. Facilita as comparações e filtragem de textos a fim de achar uma dada palavra, ou parte dela em um texto.
O que preciso para fazer isso em Java ME?
Em Java ME é necessário o uso de um pacote de terceiros como o 'me.regexp.*' . Ele pode ser baixado do projeto Jakarta, através deste link.
Algumas convenções da documentação
Caracteres
unicodeChar Coincide com qualquer caractere Unicode idênticos \ Usado para citar um meta caractere (como '*') \\ Corresponde a um único caractere '\' \0nnn Corresponde a um caractere octal \xhh Corresponde a um dado de 8-bits de caracteres hexadecimais \\uhhhh Corresponde a um dado de 16-bits de caracteres hexadecimais \t Corresponde a um caractere de tabulação ASCII \n Corresponde a uma nova linha ASCII \r Corresponde a um caractere de retorno ASCII \f Corresponde a um caractere de feed ASCII
Classes de caracteres
[abc] Classe de caracteres simples [a-zA-Z] Classe de caracteres com intervalos [^abc] Classe de caracteres negada
NOTA: Escalas incompletas serão interpretados como "começa do zero" ou "termina com o último caractere". Ou seja, [-a] é o mesmo que [\\u0000-a], e [a-] é o mesmo que [a-\\uFFFF], [-] significa "todos os caracteres".
Classes de caracteres padrão POSIX
[:alnum:] Caracteres Alfanuméricos.
[:alpha:] Caracteres Alfabéticos
[:blank:] Caracteres de espaço e tabulação.
[:cntrl:] Caracteres de Controle.
[:digit:] Caracteres Numéricos.
[:graph:] Caracteres que podem ser impressos e são também visíveis.
(Um espaço é uma impressão, mas não visível, enquanto um
'a' é ao mesmo tempo.)
[:lower:] Caracteres minúsculos do alfabeto.
[:print:] Caracteres imprimíveis (caracteres que não são
caracteres de controle.)
[:punct:] Os caracteres de pontuação (caracteres que não são dígitos,
caracteres de controle, ou caracteres de espaço).
[:space:] Caracteres de espaço (tais como espaço, tabulação e formfeed)
[:upper:] Caracteres maiúsculos do alfabeto.
[:xdigit:] Caracteres que são dígitos Hexadecimais.
POSIX não-padrão de estilo da Classes de caracteres
[:javastart:] Início de um identificador de Java [:javapart:] Parte de um identificador de Java
Classes pré-definidas
. Coincide com qualquer caractere diferente de nova linha \w Corresponde a uma palavra "caractere" (alfanuméricos e "_") \W Corresponde a um caractere não-palavra \s Coincide com um caractere branco \S Coincide com um caractere não-branco \d Coincide com um caractere de dígito \D Coincide com um caractere de não dígito
Casamentos nos limites das palavras ou linhas
^ Corresponde apenas ao início de uma linha $ Corresponde apenas ao final de uma linha \b Corresponde apenas a início de palavra (em geral palavra é definido como [a-zA-Z0-9_]) \B Corresponde ao inverso de \b
Casamentos do tipo 'o maior possível'
A* Corresponde A 0 ou mais vezes (greedy)
A+ Corresponde A 1 ou mais vezes(greedy)
A? Corresponde A 1 ou 0 vezes (greedy)
A{n} Corresponde A n vezes (greedy)
A{n,} Corresponde A pelo menos n vezes (greedy)
A{n,m} Corresponde A, pelo menos, n vezes mas não mais do que m vezes (greedy)
Casamentos do tipo 'o menor possível'
A*? Corresponde A 0 ou mais vezes (reluctant) A+? Corresponde A 1 ou mais vezes (reluctant) A?? Corresopnde A 0 ou mais vezes (reluctant)
Operadores lógicos
AB Corresponde A seguido de B A|B Corresponde A ou B (A) Usado para corresponder subexpressões (?:A) Grupo de captura que pode ser salvo para referência posterior
Referências anteriores:
\1 Referência anterior para a 1º expressão de parêntese \2 Referência anterior para a 2º expressão de parêntese \3 Referência anterior para a 3º expressão de parêntese \4 Referência anterior para a 4º expressão de parêntese \5 Referência anterior para a 5º expressão de parêntese \6 Referência anterior para a 6º expressão de parêntese \7 Referência anterior para a 7º expressão de parêntese \8 Referência anterior para a 8º expressão de parêntese \9 Referência anterior para a 9º expressão de parêntese
Código fonte de um exemplo em prática
/* Autor: Maicon Herverton, maiconherverton@yahoo.com.br, Brasil */
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import me.regexp.*;
public class Regex extends MIDlet {
public Regex() {
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
String texto = "abcdef232"; //Aqui fica o texto que você deseja verificar
RE padrao = RE("abc(\\w*)"); //Nesse caso estamos criando o padrão a ser validado o texto.
if (padrao.matcher(texto)) {
System.out.println("O texto: " + texto + " está no padrão!"); //Caso o texto esteja dentro do padrão
} else {
System.out.println("O texto: " + texto + " não está no padrão!"); //Caso o texto não esteja dentro do padrão
}
}
}


Maiconherverton - Uso de REGEX
Pessoal como fiz esse artigo em 2009, acredito que muitas pessoas terão problemas com a LIB, então segue o link do projeto Jakarta Regexp: http://jakarta.apache.org/regexp/maiconherverton 17:55, 17 May 2012 (EEST)