Intersecção e subtração em classe de caracteres em regex no Java

O suporte a regex no Java traz uma inovação na parte de classe de caracteres, que é a possibilidade de fazer intersecção e substração. Veja os exemplos.

Exemplos práticos

Por exemplo, se quisermos casar somente consoantes, poderiamos fazer uma subtração da seguinte forma:

Por exemplo:

        Pattern p;
        Matcher m;
 
        p = Pattern.compile("[a-z&&[^aeiou]]+");
        m = p.matcher("abcdefg");
        while (m.find()) {
            System.out.println(m.group());
        }

Executando este código, teremos a seguinte saída:

bcd
fg

Ou seja, com a parte &&[^aeiou] nós indicamos a subtração. Tornando assim em uma classe de caracteres contendo somente consoantes.

E no caso de uma intersecção, usamos da seguinte forma:

        p = Pattern.compile("[a-f&&[bcw]]+");
        m = p.matcher("abcdefxyzw");
 
        while (m.find()) {
            System.out.println(m.group());
        }

Que resulta em:

bc

Isto é, dentre os caracteres do intervalo a-f, somente será utilizado (caso esteja no intervalo) os caracteres 'b', 'c' e 'w'.

Além de intersecção de subtração, há como representar uma união (o que não é novo) seguindo o mesmo estilo da sintaxe acima, ficando: [a-d[m-p]], que nada mais é que o bom e velho [a-dm-p].

É isso ae! :)

Fonte

- http://java.sun.com/docs/books/tutorial/essential/regex/char_classes.htm...

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options