Schuenck 0 Denunciar post Postado Julho 28, 2005 Olá amigos, Vamos as malditas expressões regulares, hehe. Estou precisando substituir todas as ocorrências de uma palavra em uma string exceto quando esta se encontrar entre tags. Mais ou menos assim: <big> Regular Expression: A big problem </big> Quero substituir o segundo big por "<s>big</s>" mantendo os outros dois intactos, ficando assim: <big> Regular Expression: A <s>big</s> problem </big> Estou tentando algo mais ou menos assim: preg_replace("/[^<+]big[^>+]/", "<s>big</s>", $string) Pena que não funciona, hehehe. Alguém se habilita? Compartilhar este post Link para o post Compartilhar em outros sites
Wilker 3 Denunciar post Postado Julho 28, 2005 preg_replace("/([^<]*)big([^>]*)/", '$1<s>big</s>$2', $string);n testei, mas acredito q vai funcionar Compartilhar este post Link para o post Compartilhar em outros sites
rockbilly 0 Denunciar post Postado Julho 28, 2005 PHP [*] [*]$s = "<big> Regular Expression: A big problem </big>"; [*]$pattern = "[[:space:]]big[[:space:]]"; [*]$sub = "<s> big </s>"; [*]$x = eregi_replace($pattern,$sub,$s); [*] Compartilhar este post Link para o post Compartilhar em outros sites
Schuenck 0 Denunciar post Postado Julho 28, 2005 preg_replace("/([^<]*)big([^>]*)/", '$1<s>big</s>$2', $string); n testei, mas acredito q vai funcionar <{POST_SNAPBACK}> Não funcionou... existem alguns casos diferentes onde estou encontrando problemas... posso encontrar a expressão das seguintes maneiras: <big> </big> <big xxx> <xxx big> <xxx big xxx> <xxx> big <xxx> <xxx> xxx big xxx <xxx> Testei esta expressão e ela só funciona em alguns desses casos. Gostaria que apenas as duas ultimas fossem alteradas. A propósito, o que significam aqueles $1 e $2 no segundo parâmetro? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Julho 28, 2005 $txt = " Regular Expression: A big problem "; $txt = preg_replace("#()(.*?)?(big)(.*?)?()#", "\\1\\2\\3\\4\\5", $txt); Compartilhar este post Link para o post Compartilhar em outros sites
Schuenck 0 Denunciar post Postado Julho 29, 2005 Infelizmente as sugestões acima não funcionam para todos os casos, apenas para estes mais específicos. Estou tentando de outra forma agora: $texto = "<foo class='foo'>bar foo bar</foo> foo";$texto = str_replace("foo","<s>foo</s>", $texto);$texto = preg_replace("/<([^>]*)?\<s\>foo\<\/s\>([^<]*)?>/U", "<\\1foo\\2>", $texto); Primeiro eu converto todas e depois "desconverto" apenas as que estiverem dentro das tags... porém só esta funcionando se eu repetir a última instrução o número de vezes que a palavra desejada existir. Tem algo errado mas não sei o que. No exemplo acima apenas dois 'foo's deveriam ser destacados. Compartilhar este post Link para o post Compartilhar em outros sites