Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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".
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.
<?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.
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.
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...
/[^(hello)]/i