Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

klawdyo

[Resolvido] Expressão regular: Grupo negado

Recommended Posts

Sobre expressões regulares. Vamos direto ao ponto.

 

Como negar um grupo em uma expressão?

 

Exemplo.

Eu tenho os códigos abaixo:

 

$reg = '(Hello)';

 

preg_match($reg, "Hello world")

preg_match($reg, "Hello Moon")

preg_match($reg, "Olleh world")

 

Com o pattern definido em $reg, eu caso as duas primeiras. Como eu faria para negar o "Hello", casando somente as strings que NÃO contém "Hello"? Resumindo: A string pode conter qualquer palavra, EXCETO "Hello".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa forma não funciona, pois os 3 retornariam verdadeiro. Essa regex aí retorna true se ela encontrar qualquer coisa diferente de "(", "h", "e", "l", "o" e ")".

 

Eu queria que a palavra determinada não existisse na string, ou seja, só o último exemplo retornaria verdadeiro. E quando eu coloco os literais dentro da lista, todos eles passam a se comportar com caracteres proibidos, e a presença do parêntese não o torna um grupo, apenas são parênteses literais normais. Inclusive o terceiro exemplo é "hello" ao contrário justamente por esse motivo, pois a lista casa por letras, e não por palavras.

 

Obrigado pela sugestão.

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php

$regex = '#^Cara (?!feio)([a-z]+) demais$#';

$str = 'Cara feio demais';

$str2 = 'Cara legal demais';

preg_match_all($regex , $str, $arr);

print_r($arr);

preg_match_all($regex, $str2, $arr);

print_r($arr);

?>

Tem guias melhores que esse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falou Immaaggeennss... eu já havia lido o guia várias vezes, tenho até o guia de bolso, mas não tinha visto aquela parte. Deve ser do livro novo...

Pois é, cara.. o strpos não resolve, pois não é tão simples assim como o exemplo que eu coloquei...

 

Veleu, Eibon. Esse exemplo aí deu beleza. Inclusive, eu já havia feito uns testes com o ?! em outra ocasião, mas não tinha lembrado dele agora. O guia do aurélio me deu a luz q tava faltando.

 

Valeu a todos que contribuiram. Tópico encerrado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom, mas não o capítulo existe desde a primeira versão (que eu também tenho).

 

O eibon apenas transcreveu, em código, a solução proposta no referido capítulo, no final, quanto ao metacaractere modernoso (?!#ER)

 

@eibon: Melhor que esse? Em português? Sei não...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.