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