Dúvida basica sobre REGEX - expressao regular

oi. gostaria muito de saber porque usa esse trecho de códiog? para que ele serve? matcher.replaceFirst("$1");

Ahh também queria saber o que é o tal ? interrogação significa e um exemplozinho

    matcher.replaceFirst("$1");  

Vou dar um exemplo melhor. Digamos que você quisesse converter, em uma string, todas as datas yyyy-mm-dd em dd/MM/yyyy. Alguma coisa assim:

String s = "ブラジル連邦共和国- 住所: R.Direita, 247-Se, CEP 01002-001, Sao Paulo-SP, Brasil - 売り場面積- 660 m2 - オープン - 2012-12-22  ";

e quisesse converter a string na seguinte:

"ブラジル連邦共和国- 住所: R.Direita, 247-Se, CEP 01002-001, Sao Paulo-SP, Brasil - 売り場面積- 660 m2 - オープン - 22/12/2012  ";

Uma forma de fazer isso é reconhecer o padrão ano-mês-dia, e ver que ele tem 3 pedaços - o ano, o mês e o dia. Então, na hora de especificar o padrão, devemos separar os três pedaços (ou “groups” na documentação de java.util.regex.Pattern).

O padrão para reconhecer seria:

Pattern pat = Pattern.compile ("([0-9]{4})-([0-9]{2})-([0-9]{2})");

note que os pedaços são separados usando-se os parênteses.
Para efetuar a troca, o $ é especial - $1 indica o primeiro grupo, $2 o segundo grupo, $4 o terceiro grupo - é possível listar até 9 grupos.

Então, para trocar a data para o formato desejado - dia/mês/ano, você pode fazer:

String t = pat.matcher (s).replaceAll ("$3/$2/$1");

minha nossa!! ! que negócio dificil é esse? rss vou estuadr mais :roll: