Ir para conteúdo

POWERED BY:

Arquivado

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

Schuenck

Expressões regulares

Recommended Posts

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

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

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

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

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

×

Informação importante

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