Bom dia!
Li o tópico http://www.guj.com.br/java/149224-como-fazer-esse-regex-de-qualquer-caracter
porém continuo não conseguindo fazer o que preciso.
Se alguém puder ajudar por favor.
Meu problema, resumindo, é o seguinte:
Receberei um texto que pode conter valores com qualquer caracteres entre os delimitadores <% e %>.
Preciso obter esses valores, que serão uma chave em um properties no qual obtenho um conteúdo específico, o qual pode ser qualquer coisa.
Não posso criar regras para esses valores, ou seja, não posso dizer que para informar & , deve-se informar &, por exemplo.
Criei um método apenas para teste:
public static void main(String[] args) {
String texto = "Teste <%ababababa%> outro teste <%123b%&*&()a4b<b>%> teste de novo <%1@$%&*%&23b%&*()a4b<b>%> teste de novo <%1@$%&*%&23b%&*()&&&&a4b<b>%>";
Pattern pattern = Pattern.compile("<%(.*?)%>");
Matcher matcher = pattern.matcher(texto);
String tags = "";
while (matcher.find()) {
String group = matcher.group(1);
tags += group + " ";
System.out.println(tags);
texto = texto.replaceFirst("<%(.*?)%>", group);
System.out.println(texto);
}
}
O resultado, e erro, que exibido é o seguinte
ababababa
Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
at java.util.regex.Matcher.appendReplacement(Unknown Source)
at java.util.regex.Matcher.replaceFirst(Unknown Source)
at java.lang.String.replaceFirst(Unknown Source)
at com.cpqd.promus.ebpp2.teste.Test.main(Test.java:18)
Teste ababababa outro teste <%123b%&*&()a4b<b>%> teste de novo <%1@$%&*%&23b%&*()a4b<b>%> teste de novo <%1@$%&*%&23b%&*()&&&&a4b<b>%>
ababababa 123b%&*&()a4b<b>
Teste ababababa outro teste 123b%&*&()a4b<b> teste de novo <%1@$%&*%&23b%&*()a4b<b>%> teste de novo <%1@$%&*%&23b%&*()&&&&a4b<b>%>
ababababa 123b%&*&()a4b<b> 1@$%&*%&23b%&*()a4b<b>
Se eu retiro o texto.replaceFirst("<%(.*?)%>", group); consigo visualizar normalmente tudo que está entre <% e %>.
Porém como relpaceFirst gera a exceção acima.