Estou com um pequeno problema com um RegEx.
Preciso fazer um programa que pesquise uma determinada palavra em um conjunto de textos e grife a palavra pesquisada no meio do texto.
Para isso desenvolvi o seguinte método:
public void grifarTexto(Relato relato, String texto) {
relato.setDescricaoRelato(relato.getDescricaoRelato().replaceAll("(?i)(" + texto + ")", "<mark>$1</mark>"));
}
Porém ai surgiram dois probleminhas…
1º Gostaria que ele pegasse a palavra inteira, porém quando colocos os caracteres de marcação de inicio (^) e fim ($), ele acaba não grifando nenhuma parte do texto.
Método utilizado:
public void grifarTexto(Relato relato, String texto) {
relato.setDescricaoRelato(relato.getDescricaoRelato().replaceAll("(?i) ^(" + texto + ")$", "<mark>$1</mark>"));
}
2º Ele está ignorando os caracteres maísculo e minusco das palavra corretamente, salvo quando tem acento.
Por exemplo: Quando pesquiso pela palavra mão
MÃO (não grifa)
mão (grifa)
mÃo (não grifa)
MãO (grifa)
Ou seja ele não ignora os caracteres maísculo e minusco de letras acentuadas.
Fiz testes dessas expressões no site Rubular para ver se estavam corretas e pelo retorno do site aparenta estar ok.
Links com os testes: http://rubular.com/r/YRcTJBn8eY e http://rubular.com/r/dh753n4mgl
Alguém sabe qual a expressão regular que eu devo usar para conseguir fazer as validações que eu desejo?