klawdyo 0 Denunciar post Postado Junho 9, 2010 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
Evandro Oliveira 331 Denunciar post Postado Junho 9, 2010 /[^(hello)]/i Compartilhar este post Link para o post Compartilhar em outros sites
klawdyo 0 Denunciar post Postado Junho 9, 2010 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
Bruno Augusto 417 Denunciar post Postado Junho 10, 2010 Guia ER: Negar palavra Mas você precisa MESMO de ER para isso? Sei não, ao que me parece, um strpos() resolve seu caso (ou stripos(), se precisar da insensitividade) Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Junho 10, 2010 <?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
klawdyo 0 Denunciar post Postado Junho 10, 2010 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
Bruno Augusto 417 Denunciar post Postado Junho 10, 2010 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