View Full Version : Ajuda com preg_replace


s31s3r
10-01-2008, 12:52
Este código:

$string = preg_replace('([&]+[a-zA-Z0-9]+[;]+)', '_', $string);
Substitui qualquer string que comece com "&" e acabe em ";" e no meio delas contenha letras ou números.
Falta-me apenas limitar a quantidade de letras ou números que pode haver.
Por exemplo defenia para aplicar a regra caso encontra-se entre 6 a 8 números ou letras.
Para "&fghsdef;" a regra aplicava-se mas para "&fg;" já não.
Não estou a conseguir fazer isto.
Já tentei

$string = preg_replace('([&]+[a-zA-Z0-9]{4-8}+[;]+)', '_', $string);
Mas não resulta...

fil79
10-01-2008, 13:15
não sei se percebi bem mas acho que podes fazer isso usando um if:

if o último caracter da string fòr x e o primeiro Y {

acções

}


para isso usa a função substr (http://pt.php.net/substr)

s31s3r
10-01-2008, 13:18
Sim, mas eu queria evitar isso. só queria usar tudo com o preg_replace()

spastikman
10-01-2008, 13:21
Sim, mas eu queria evitar isso. só queria usar tudo com o preg_replace()






<?php

$var = "&ssfkddf;";

echo preg_replace('/^&(\w|\d){4,8};/', 'X', $var) . "\n";

$var1= "&ala;";

echo preg_replace('/^&(\w|\d){4,8};/', 'X', $var1) . "\n";

$var2= "&a5s4l1;";

echo preg_replace('/^&(\w|\d){4,8};/', 'X', $var2) . "\n";



?>


outputs :


root@myb0x:~# php ex.php
X
&ala;
X
root@mybox:~#

s31s3r
10-01-2008, 13:53
Acho que não me expliquei bem:

O que eu quero é transformar a string

"hgfjhgffjh&jhgg;hgs&gh;ghfh&jhggfhrg;"

em

"hgfjhgffjh_hgs&gh;ghfh_"

mas só no caso de haver um certo número de caracteres na expressão pretentida que é
"&[entre 4 a 8 letras ou dígitos]";

Falando na língua humana é:
Encontra 4 a 8 letras ou dígitos entre os caracteres "&" e ";", respectivamente e substitui a expressão por "_"



<?php

$var = "&ssfkddf;";

echo preg_replace('/^&(\w|\d){4,8};/', 'X', $var) . "\n";

$var1= "&ala;";

echo preg_replace('/^&(\w|\d){4,8};/', 'X', $var1) . "\n";

$var2= "&a5s4l1;";

echo preg_replace('/^&(\w|\d){4,8};/', 'X', $var2) . "\n";



?>
outputs :
Desculpem o post em duplicado mas era só para dizer que os resultados que postastes estão completamente diferentes do que tenho aqui... Nem sei como te dá isso:wow:

s31s3r
10-01-2008, 15:15
Era só uma questão de ponto de vista:-D
preg_replace('/([&]+[#a-zA-Z0-5]{1,6}+[;])/', '_', $string);
pode ser que sirva para alguém