Ajuda com preg_replace

s31s3r

Power Member
Este código:
PHP:
$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
PHP:
$string = preg_replace('([&]+[a-zA-Z0-9]{4-8}+[;]+)', '_', $string);
Mas não resulta...
 
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
 
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:
<?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:
 
Última edição pelo moderador:
Era só uma questão de ponto de vista:-D
PHP:
preg_replace('/([&]+[#a-zA-Z0-5]{1,6}+[;])/', '_', $string);
pode ser que sirva para alguém
 
Back
Topo