2010-12-15 148 views
2

Hey, je dois supprimer une partie d'une chaîne (je ne suis pas:PHP enlever une chaîne d'une chaîne

$content = "user=predator1&scode=mau4&athleteid=17007"; 

$content = "user=predator1&athleteid=17007"; 

J'ai besoin de supprimer la partie « $ code = XXXXX » (XXXXX partie est variable)

J'ai essayé d'utiliser ceci:

$content = preg_replace("/&scode=[^a-z]*/", "", $content); 

mais ne fonctionne pas ...

Comment puis-je résoudre ce problème

Merci!

Répondre

4

Il y a probablement une méthode plus simple/rapide qui implique regex mais cette méthode est sûre (parse_str assure la chaîne de requête est correctement analysée).

$content = "user=predator1&scode=mau4&athleteid=17007"; 

parse_str($content, $vars); 

if (isset($vars['code'])) 
{ 
unset($vars['code']); 
} 

$content = http_build_query($vars); 

var_dump($content); 

Docs pour parse_str: http://www.php.net/manual/en/function.parse-str.php

0

Ne devrait pas "/&scode=[^a-z]*/" être plus comme "/&scode=[a-zA-Z0-9]*/"?

0

Cela fonctionnera sans utiliser une expression régulière:

$pre = "user=predator1&scode=mau4&athleteid=17007"; 
$exp = explode('&', $pre); 
$content = implode('&', array($exp[0], $exp[2])); 
+0

Seulement s'il n'y a que trois paramètres. –

0
preg_replace("/code=[a-zA-Z0-9]*/", "code=", $content); 
0
$content = preg_replace("|&scode=[a-zA-Z0-9]+&|", '&', $content); 
1

Vous devriez essayer cette ligne:

$content = preg_replace("/&scode=[a-zA-Z0-9]*/", "", $content); 

Il dit d'enlever tout ce qui commence par &scode qui est suivi par un nombre quelconque de lettre minuscule , des lettres majuscules ou des chiffres.

Dans votre code d'origine, vous utilisiez [^a-z]*. Le ^ dans votre liste de caractères dit à pas correspondre sur des lettres minuscules, de sorte qu'il cesserait de remplacer le contenu dès qu'il a vu une lettre minuscule. Fondamentalement, votre expression régulière supprimerait seulement les nombres qui ont commencé un code, mais ne supprimerait rien d'autre dans le code s'il incluait un caractère en minuscules. Mon expression regex ci-dessus est une liste inclusive, en disant de supprimer tout ce qui est sur la liste, de sorte qu'il va supprimer tout caractère alphanumérique.

Espérons que ça aide.

+0

Merci, mais si le dernier caractère de la sous-chaîne est un alphanumérique comme $ content = "user = predator1 & scode = mau4" (et non le & d'un autre paramètre), comment puis-je configurer l'expression régulière pour gérer cette option? – Gabriele

+0

@Gabriele: Je ne suis pas sûr de ce que vous demandez. L'expression régulière dans ma réponse correspond à cette chaîne. – AgentConundrum

+0

@Gabriele: Voulez-vous dire "what if' scode' est la * première * variable, et par conséquent * n'a pas * un "&" de tête? Vous pouvez le faire avec assez facilement.Si c'est ce que vous voulez dire, laissez-moi savoir et je mettrai à jour ma réponse – AgentConundrum