Expressoes regulares Perl, como negar strings?

tipo, eu sei q fazendo:

/[^a]*/i

eu estaria negando a letra A ou a
mas como eu faco pra negar uma string?? tipo, pra negar a palavra boca?

pq c eu fizer:

/[^boca]*/i

eu estarei negando as letras b, o, c e a, e n negando a palavra boca…

Aham, o que você escreveu em Perl (o equivalente em Java é quase igual) é que você aceita qualquer coisa que não tenha uma das seguintes letras: b, o, c, a. Por acaso, se você usar a palavra boca, ela não vai bater, mas qualquer palavra que tenha uma das letras a, b, c, o, não vai bater também.

Chute:

/[^(boca)]*/i

Marcio Kuchma

http://www.javaranch.com/newsletter/Apr2003/RegexTutorial.htm

[quote=thingol]http://www.javaranch.com/newsletter/Apr2003/RegexTutorial.htm

[/quote]

n consegui acha isso q eu preciso nesse tutorial :frowning:

[quote=kuchma]Chute:

/[^(boca)]*/i

Marcio Kuchma[/quote]

ja tentei, n funciona… eh o mesmo q [^boca]

Na verdade eu até tentei usar (?<!X) (no seu caso seria “(?<!boca)” ) mas não consegui fazer funcionar. Releia o artigo que lhe mandei, e veja se é isso mesmo - deve ter mais alguma pegadinha que não entendi.

Na prática eu não tento fazer uma expressão regular que negue nela mesmo, mas eu normalmente inverto o resultado - por exemplo, “boca." pega tudo que começa com boca. Então eu uso ! matches ("boca.”) em vez de matches ("(?<!boca).*") (ou seja lá qual é a expressão regular que devo usar para negar a tal da string).

Isso eu faço quando uso grep - eu uso a opção -v, que inverte o resultado da expressão regular.

Eu li, um tempão atrás, no GUIA DE EXPRESSÕES REGULARES que negar uma string inteira é meio complicado…

Dá uma olhada lá que ele mostra uma solução…

[]´s
Tiago

Obrigado pela dica. Funcionou

import java.util.regex.*;
import java.util.*;

class LookBehind {
    public static void main(String[] args) {
        String[] test = {
            "Boca Ratón",
            "uma boca no caminho",
            "bocca",
            "qualquer coisa",
        };
        Pattern pat = Pattern.compile("(?!boca).*", Pattern.CASE_INSENSITIVE);
        for (int i = 0; i < test.length; ++i) {
            System .out .println ("<" + test[i] + "> : " + pat.matcher(test[i]).matches());
        }
    }
}

Resultado do teste.

C>chcp 1252
Active code page: 1252

C>\jdk1.5.0\bin\java -cp . LookBehind
<Boca Ratón> : false
<uma boca no caminho> : true
<bocca> : true
<qualquer coisa> : true

C>\j2sdk1.4.2_08\bin\java -cp . LookBehind
<Boca Ratón> : false
<uma boca no caminho> : true
<bocca> : true
<qualquer coisa> : true