Como usar uma expressão regular de negação "^" para palavras?
5 respostas
E
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…
E
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…
P
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