[RESOLVIDO] pattern e matcher - método com regex

oi a todos

preciso de uma ajuda no método abaixo.

preciso procurar por algumas strings(padroes) dentro de outras strings maiores(registros). Pra isso estou usando regex. Quando um destes padrões é encontrado, a posição dele (do padrão sendo procurado) no registro é mostrada na tela. Até ai tudo bem. Depois que este padrão não for mais encontrado, outros padrões deverão ser procurados agora nos mesmos registros que citei acima.

O problema é que a partir da primeira vez que alguma coisa é encontrada, o método continua dizendo que os outros padrões que estão sendo procurados também estão sendo encontrados, e imprime até a posição “posição 0”. Porém este padrão não deveria ser encontrado porque ele não existe no registro.

Outra coisa é que o método gera um erro e pára de procurar os outros padrões que eu preciso encontrar se eles existirem dentro das strings “registro”. Por exemplo, eu tenho 10 padrões, ele procura 4, encontra o quinto, mostra a posição, continua procurando o sexto e gera o erro. Não continua procurando até o último padrão.

Alguma dica?

Segue o código do método

    public void regexMethod(){
        
        System.out.println("REGEX");
        ArrayList regexReader = new ArrayList(); //registros do log
        ArrayList regexRegistry = new ArrayList(); //registros padrão da classe

        String allRegs = "";
        String padroes = null;
        String registros = null;

        try{

            auditRegex = new BufferedReader(new FileReader("C:/log.txt"));
            String s;
            
            regexRegistry = StrAtaques.array; //preenche com os padrões de ataque
            
            while ((s = auditRegex.readLine()) != null){
                regexReader.add(s); //preenche com os dados do log
                System.out.println(s);
            }
            
            for (int i = 0; i < regexRegistry.size(); i++){
                padroes = (String) regexRegistry.get(i);
                p = Pattern.compile(padroes);
                System.out.println("padrao sendo procurado : " +padroes);
                for (int j = 0; j < regexReader.size(); j++){
                    registros = (String) regexReader.get(j);
                    m = p.matcher(registros);
                    System.out.println("linha sendo analisada : " +registros+ " | e padrão : " +padroes);
                    
                    while(m.find()){
                        System.out.println("achei o registro: " +padroes+ " na posicao: " +m.start());  
                    }
                    m = null;
                    
                    
                }
                p = null;
            }
                    
        } catch (Exception e){
            e.printStackTrace();
        }
        
        //System.out.println(allRegs);
        allRegs = null;
        regexReader = null;
        regexRegistry = null;
        p = null;
        m = null;
        System.out.println("SAINDO DE REGEX");
    }

e o erro é esse


Connected
***** Addr: atp://127.0.0.1 place: 
No integrity check because no security domain is authenticated.
REGEX
201.22.90.51 - - [30/Nov/2005:09:50:12 -0100] "GET /images/back_topo.jpg HTTP/1.1" 304
201.22.90.52 - - [30/Nov/2005:09:50:12 -0200] "GET /images/back_topo.exe HTTP/1.1" 304
padrao sendo procurado : ~
linha sendo analisada : 201.22.90.51 - - [30/Nov/2005:09:50:12 -0100] "GET /images/back_topo.jpg HTTP/1.1" 304 | e padrão : ~
linha sendo analisada : 201.22.90.52 - - [30/Nov/2005:09:50:12 -0200] "GET /images/back_topo.exe HTTP/1.1" 304 | e padrão : ~
padrao sendo procurado : #
linha sendo analisada : 201.22.90.51 - - [30/Nov/2005:09:50:12 -0100] "GET /images/back_topo.jpg HTTP/1.1" 304 | e padrão : #
linha sendo analisada : 201.22.90.52 - - [30/Nov/2005:09:50:12 -0200] "GET /images/back_topo.exe HTTP/1.1" 304 | e padrão : #
padrao sendo procurado : ////////
linha sendo analisada : 201.22.90.51 - - [30/Nov/2005:09:50:12 -0100] "GET /images/back_topo.jpg HTTP/1.1" 304 | e padrão : ////////
linha sendo analisada : 201.22.90.52 - - [30/Nov/2005:09:50:12 -0200] "GET /images/back_topo.exe HTTP/1.1" 304 | e padrão : ////////
padrao sendo procurado : .exe
linha sendo analisada : 201.22.90.51 - - [30/Nov/2005:09:50:12 -0100] "GET /images/back_topo.jpg HTTP/1.1" 304 | e padrão : .exe
linha sendo analisada : 201.22.90.52 - - [30/Nov/2005:09:50:12 -0200] "GET /images/back_topo.exe HTTP/1.1" 304 | e padrão : .exe
achei o registro: .exe na posicao: 68                              //(.exe) PADRÃO FOI ENCONTRADO NA POSIÇÃO 68 - CORRETO
padrao sendo procurado : ^
linha sendo analisada : 201.22.90.51 - - [30/Nov/2005:09:50:12 -0100] "GET /images/back_topo.jpg HTTP/1.1" 304 | e padrão : ^
achei o registro: ^ na posicao: 0                              //(^) NÃO DEVERIA TER SIDO ENCONTRADO PORQUE NÃO EXISTE E AINDA TEM A POSIÇÃO 0
linha sendo analisada : 201.22.90.52 - - [30/Nov/2005:09:50:12 -0200] "GET /images/back_topo.exe HTTP/1.1" 304 | e padrão : ^
achei o registro: ^ na posicao: 0                             //IDEM PARA A SEGUNDA STRING QUE ELE PROCURA O PADRÃO (^)
java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0                     
+
^
	at java.util.regex.Pattern.error(Pattern.java:1713)
	at java.util.regex.Pattern.sequence(Pattern.java:1878)
	at java.util.regex.Pattern.expr(Pattern.java:1752)
	at java.util.regex.Pattern.compile(Pattern.java:1460)
	at java.util.regex.Pattern.<init>(Pattern.java:1133)
	at java.util.regex.Pattern.compile(Pattern.java:823)

SAINDO DE REGEX

Disconnected

dio,
Tenho uma suposição. Você está procurando por caracteres especiais. Tome cuidado, eles devem ser precedidos por “” senão podem ser considerados como expressão. Exemplo “^” é para procurar o “começo da linha” se voce quer encontrar o caracter “^” deve usar o “^” . Até o próprio “”, na hora de montar o valor da string coloque “\^”.
Tenta aí e diz se resolveu.

UHHHHU

é isso ai mano!!!

valeu mesmo. funcionou perfeito.

Legal sua resposta, esclareceu pra mim tamb?m.