Jump to content


Photo

Problema Com Preg_replace


  • Faça o login para participar
8 replies to this topic

#1 KmK)MeteteX-

KmK)MeteteX-

    Normal

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 15/07/2006, 11:31

$str = preg_replace( "#<a href=\"(.+?)\">(.+?)</a>#is","<a href=\"$2\" target=\"_blank\">AAAA</a>", $str);


no lugar de AAAA queria que aparecesse ate o 20º caractere do link....
to tenando usar "substr" so que nao to conseguindo

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 15/07/2006, 12:22

Seria isso ?! :unsure:

<?php

$str = '<a href="http://forum.wmonline.com.br/">WebFórum - O FÓRUM DOS WEBMASTERS</a>';
$str = preg_replace('#<a href="(.+?)">(.+?)</a>#ise', "'<a href=\"$2\" target=\"_blank\">' . substr('\\2', 0, 20) . '</a>'", $str);

print $str;

?>
[]’s :DAté mais

#3 KmK)MeteteX-

KmK)MeteteX-

    Normal

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 15/07/2006, 12:31

cara eu te amo!!!
so me explica umas coisas...
depois do # vc usou " ise"
onde eu acho as configuracoes respectivas desses caracteres?

e nessa segunda parte ae tambem...
"'<a href=\"$2\" target=\"_blank\">' . substr('\\2', 0, 20) . '</a>'"
eu nao intendi como o php vai interpretar isso ae nao... se podesse explicar ia agradecer... :)

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 15/07/2006, 12:45

cara eu te amo!!!
so me explica umas coisas...
depois do # vc usou " ise"
onde eu acho as configuracoes respectivas desses caracteres?

e nessa segunda parte ae tambem...
"'<a href=\"$2\" target=\"_blank\">' . substr('\\2', 0, 20) . '</a>'"
eu nao intendi como o php vai interpretar isso ae nao... se podesse explicar ia agradecer... :)

São os modificadores ... no manual tu não encontra a explicação deles em português. Pensando nisso, nosso grande amigo Eclesiastes traduziu-os para nós: eclesiastes.zoone.com.br/pcre =)

O segundo parâmetro é regra do modificador E. A sintaxe dele é executada pelo PHP, portanto, o código à ser interpretado deve estar entre aspas. ;)

[]’s :DAté mais

#5 KmK)MeteteX-

KmK)MeteteX-

    Normal

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 15/07/2006, 12:50

o negocio é deixar o \\2 entre aspas simples porque se nao entra naquela regra do php que nao pode existir variavel começando com numeros ne?

de qualquer forma, muito obrigado :)

#6 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 16/07/2006, 00:30

o negocio é deixar o \\2 entre aspas simples porque se nao entra naquela regra do php que nao pode existir variavel começando com numeros ne?

de qualquer forma, muito obrigado :)

O \\2 é o que dizemos retrovisor. Ele é uma referência ao valor do segundo grupo da ER, aquele que pega o conteúdo entre <a...> e </a>. Ele precisa ficar entre aspas pois é uma variável. Aspas simples porque o conteúdo deste parâmetro precisar estar entre aspas duplas pra poder ser avaliado. ;)

[]’s :DAté mais

#7 KmK)MeteteX-

KmK)MeteteX-

    Normal

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 16/07/2006, 10:05

eu modifiquei um pouco em cima do que vc me passou:
$str = preg_replace('#<a href="(.+?)"(.+?)>(.+?)</a>#ise', "'<a href=\"$1\" target=\"_blank\">' . substr('$3', 0, 50) . '</a>'", $str);
agora, ta vendo o segundo " (.+?) " ?
esse codigo funciona perfeitamente quando a pessoa que vai adicionar o link coloca qualquer parametro a mais como por exemplo um _blank.
Mas, se a pessoa deixar apenas o link normal essa "segunda variavel" nao vai existir e o codigo ja nao funciona....

1 - porque ela simplismente nao fica fazia e funciona?
2 - teria um jeito de arrumar isto ?

#8 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 16/07/2006, 10:20

E você vai usar o segundo grupo?
Caso não será utilizado, trate-o como fantasma.

(?:ER)
É como um grupo normal () só que não é guardado nem incluído na contagem de grupos, ou seja, não é acessível com retrovisores ou $1, pode ser considerado um grupo fantasma. Assim ^(Homer) (?:J\.) (Simpson) casa o nome completo, mas \1 e \2 contém Homer e Simpson, respectivamente.


Fonte: http://guia-er.sourc...guia-er-32.html

E outra coisa, no manual um usuário postou o resultado de um benchmark nos comentários da função preg_replace_callback():

// 2.76 seconds to run 50000 times
preg_replace("/\{(.*?)\}/e","a('\\1','\\2','\\3',\$B)",$a);

// 0.97 seconds to run 50000 times
preg_replace_callback("/\{(.*?)\}/s","a",$a);


Fonte: http://br2.php.net/m...lback.php#65182
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#9 KmK)MeteteX-

KmK)MeteteX-

    Normal

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 16/07/2006, 10:34

valew pela ajuda galera, mas a solucao aqui será mexer no javascript que insere o link pra nao por nada a mais que apenas o link :(




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq