Como usar uma expressão regular de negação "^" para palavras?
5 respostas
edsonlopes
Bem, pelo que eu andei encontrando na internet, o pessoal usa esta negação “^” somente para letras… Mas e para palavras inteiras, dá certo?
Um exemplo do que desejo, é:
“Gostaria das palavras Coca ou Pepsi, mas não para a palavra Fanta.” Então procuro algo como “b[/b]”, mas falta a negação da palavra Fanta… E aí que o bicho pega para mim, pois não tenho ideia de como fazer isso…
Andei pensando em algo bruto como: ^([^F]|F[^a]|Fa[^n]|Fan[^t]|Fant[^a])
Mas testando no http://regexpal.com/ não funciona…
Bem, eu estava indo para recuperar as duas coisas em uma Regex só… Mas vou tentar a escolha nº 1
Vou elaborar duas rotinas…
Mas vou testar como anda o desempenho usando 2 Regex, e outra usando apenas uma rotina Regex, e outra rotina interna no Java (o famoso “contains” da palavra que eu não desejo), e assim mapear em uma lista somente as coisas que desejo…
:!: Valeu pela dica até agora, mas fico aberto a mais dicas de como deixar tudo em uma só Regex, pois creio eu que o desempenho nessa tarefa será melhor colocando tudo em uma só tarefa para o sistema se virar e me buscar somente as palavras desejadas…
edsonlopes
Há, pelo http://aurelio.net ele faz conforme eu falei na minha metodologia “bruta”…
O bicho pegou… Pois agora não sei como colocar ela dentro da expressão como um todo…
peczenyj
se eu tenho que negar uma expressão mais complexa como uma palavra inteira prefiro inverter o if ou usar outra coisa que não seja expressão regular sob pena de ficar ilegivel.
T
thingol
entanglement:
1) Recomendo usar 2 expressões regulares (uma para pegar as coisas que batem, e outra para pegar as coisas que não batem). Isso é mais simples de manter.
2) O que você quer pode ser feito, em Java, usando-se algum desses padrões abaixo - não sei qual deles:
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?<=X) X, via zero-width positive lookbehind
(?<!X) X, via zero-width negative lookbehind