Regex como o Perl para o Java

0 respostas
saoj

É difícil entender como o suporte do Java a regular expressions pode ser tão contra-intuitivo. Muito provavelmente os caras que fizeram essas classes nunca programaram em alguma linguagem com suporte nativo a regex como PERL.

PERL:

my $s = "aa11bB22cc33";

if ($s =~ /\w+(\d+)b+(\d+)\w+(\d+)/i) {

    print "$1,$2,$3\n";

}

Para fazer isso (básico de regex!) com Matcher, Pattern, blah, blah, etc. é um parto. Uma pentelhação desnecessária.

Então resolvi abstrair na minha própria classe, já que a API oficial não sabe o que é abstração nem PERL.

Regex.setEscapeChar('#'); // uma única vez apenas!

String[] s = Regex.match("aa11bb22cc33", "/#w+(#d+)b+(#d+)#w+(#d+)/i");

if (s != null) {

    System.out.println(s[0] + "," + s[1] + "," + s[2]);
}

E para subsitute:

PERL:

my $s = "sergio33pela44";

$s =~ s/\d+P/AA/gi;

print "$s\n";

Regex class:

String res = Regex.sub("sergio33pela44", "s/#d+P/AA/gi");
      
System.out.println(res);

Não vou entrar no mérito do método String.matches inexplicavelmente tentar fazer um match na String inteira e nem no problema de usar o escape char ‘’.

Acho que finalmente agora com essa abstração aí vou começar a tentar fazer meus scripts em Java e não em PERL.

Alguém já teve essa vontade de se livrar de Pattern, Matcher, “\\\d”, matches(), etc.? Acho que para quem já programou em Perl ou Ruby, isso é uma aberração da natureza.

Criado 15 de janeiro de 2008
Respostas 0
Participantes 1