Split considerando a busca

2 respostas
A

Olá pessoal.

tenho a seguinte duvida, tenho uma String que representa um texto, então quero quebrar este testo toda vez que achar a palavra select e from.

fiz desta forma:

String resultado = "select * from teste where 1=1".split("select|from|where")

porém quando eu recebo o vetor ele desconsidera a palavra de divisão “select|from|where”. vindo só:

  • " * "
  • " teste "
  • " 1=1"

teria como ele considerar a palavra da expressão?
voltando:

  • "select * "
  • "from teste "
  • “where 1=1”

Grato a todos.

2 Respostas

J
String resultado = "select * from teste where 1=1";
		 
String regex = "(select.+)(from.+)(where.+)";
		 
Pattern p = Pattern.compile(regex);
		 
Matcher m = p.matcher(resultado);
		 
while(m.find()){
   System.out.println(m.group(1));
   System.out.println(m.group(2));
   System.out.println(m.group(3));
}
T

Consegui o que você queria. Rode o programa e veja se isso é o que você esperava.

import java.util.*;

class SplitConsideraRegex {
    public static void main(String[] args) {
        String sql = "seLect * FROM teste Where 1=1";
        String[] resultado = sql.split ("(?i)(?=(select|from|where))");
        System.out.println ("sql = " + sql);
        for (int i = 0; i &lt resultado.length; ++i) {
            System.out.println (i + ": [" + resultado [i] + "]");
        }
        // A expressão regular deve considerar a palavra "select" apenas, 
        // não alguma palavra que contenha a palavra "select". 
        // O correto seria usar "\b", como abaixo:
        sql = "select * from teste where selected = \"frommer\" and nowhere = \"true\" ";
        System.out.println ("sql = " + sql);
        resultado = sql.split ("(?i)(?=\\b(select|from|where)\\b)");
        for (int i = 0; i &lt resultado.length; ++i) {
            System.out.println (i + ": [" + resultado [i] + "]");
        }
    }
}
Criado 16 de abril de 2007
Ultima resposta 16 de abr. de 2007
Respostas 2
Participantes 3