Como montar determinada expressão regular

2 respostas
MaikoID

Olá a todos eu preciso de ajudar para montar um expressão regular, eu já tentei de várias formas mas não consigo.

Imagine a seguine string

String x = "\r\nsdasd#12sasjdhasdads#ashdsduaa\r\n";
// eu fiz o seguinte
Pattern padrao = Pattern.compile(".*#\\d{1,2}.*#.*"};
Matcher pesquisa = padrao.matcher();
if(pesquisa.matcher()){
.
.
.
// o nome dos metdos podem nao estar certos.

Como que eu monto uma expresao para isto, lembrando que os digitos depois da primeira # pode ir até 2, e a string pode conter apenas caracteres especiais antes do primeiro # e depois do segundo # ou pode conter caracteres normais + especiais tbem.

2 Respostas

T

Para montar uma expressão regular, você precisa saber o que você quer dela.

Você quer pegar os 2 campos que estão entre # (no seu caso, "12sasjdhasdads" e "ashdsduaa" ) ? Se for isso, você precisa fazer algo como:

"#(\\d{1,2}[^#]*)#([^#]*)"

e você pega o primeiro e o segundo grupo. Mais ou menos assim:
import java.util.regex.*;

class TesteRegex {
    public static void main(String[] args) {
        String[] testes = {
            "\r\nsdasd#12sasjdhasdads#ashdsduaa\r\n",
            "bla#blebli#bloblu",
            "carnaval#007ehcom a #globeleza#hein?"
        };
        Pattern pat = Pattern.compile ("#(\\d{1,2}[^#]*)#([^#]*)");
        for (String teste : testes) {
            System.out.println (teste);
            Matcher mat = pat.matcher (teste);
            if (mat.find()) {
                System.out.printf ("Bateu - 1 = [%s], 2 = [%s]%n", mat.group(1), mat.group(2));
            } else {
                System.out.printf ("Não bateu...%n");
            }
        }
    }
}
A saída esperada:
sdasd#12sasjdhasdads#ashdsduaa

Bateu - 1 = [12sasjdhasdads], 2 = [ashdsduaa]
bla#blebli#bloblu
NÒo bateu...
carnaval#007ehcom a #globeleza#hein?
Bateu - 1 = [007ehcom a ], 2 = [globeleza]
MaikoID

Opa, é na verdade eu preciso do que esta entre os #, eu preciso dos digitos e dos caracteres, mas digamos, não é bem isto, o que quero é validar uma string que contenha este conjunto com as #. Exemplificando

Olá, tudo bem #12Fulano#? eu sou qualquer coisa.

ou

Menu nome é #12Fulano#
.
.

Entendeu?

Com a expressão que montei (.#\d{1,2}.#.*) a primeira frase é valida, mas ja na segunda frase onde no segundo # acaba a linha ela não é valida.

Esta é a dúvida, como validar isto aqui. “Menu nome é #12Fulano#\n(ou)\r\n(ou sabe-se deus o que tem aqui)”

abraço.

ps: Eu executei o debug e achei exatamente o que é a string

public static void main(String[] args) {
        String x = "iada a você por e-mail.\r\r\rSenha Provisória: #10adasd#\r\r\r";

        Pattern padrao = Pattern.compile(".*#\\d{1,2}.*#([^#]*)");
        Matcher pesquisa = padrao.matcher(x);
        if (pesquisa.matches()) {
            System.out.println("Achou");
        }
    }

Deste modo não funciona, eu não consigo validar toda linha.

ps: Funcionou, foi so usar a seguinte expressão: “[^#]#\d{1,2}.#[^#]*” eu nunca tinha mexido com expressões regulares até então. Obrigado pela ajuda.

Criado 17 de março de 2009
Ultima resposta 18 de mar. de 2009
Respostas 2
Participantes 2