2010-08-10 5 views
0

exacte Je cherche à faire quelque chose comme obtenir le match opposé à cette ligne:preg_replace face

$input = "21.asdf*234true;asdf0--11" 
$_BOOL_ ="/(true|false)/i"; 
$output = preg_replace($_BOOL_, '', $input); 
//Result: "21.asdf*234;asdf0--11" 
//Desired result: "true" 

en php qui ofcourse 5.3 est

$output = preg_filter($_BOOL_, '', $input);

Mais je suis sur 5.2 , et je ne sais pas comment obtenir ce que je veux ici ... Suggestions (autre que compiler 5.3 sur Ubuntu)?

Répondre

1

Votre exemple est encore un peu vague.

Si la chaîne contient true ou false, la sortie doit être "true"?

Si c'est le cas, vous cherchez preg_match() je pense.

Si vous cherchez à renvoyer "true" si la chaîne contient true et "false" si elle contient false, je pense que vous devrez peut-être utiliser une série de fonctions telles que preg_match() ou strpos() pour faire correspondre chaque condition séparément.

+0

Je vais accepter cela car je viens de réaliser le défaut de ma pensée ici. Je l'ai utilisé dans un wrapper pour utiliser regex prédéfini pour dépouiller les personnages, mais vous m'avez fait réaliser que cela permet des chaînes comme "truefalsefalse", que je ne veux pas. J'utiliserai preg_match pour préformer ce que je veux. Merci. – Incognito

0

Que diriez-vous:

$output = preg_replace($_BOOL_, '', preg_grep($_BOOL_, $input)); 

EDIT: En regardant votre question, je ne suis pas sûr que nous parlons de la même chose. Pour chaque chaîne du tableau d'entrée, preg_replace effectue les remplacements possibles et renvoie le résultat; Toute chaîne qui ne correspond pas à la regex est transmise inchangée. preg_filter est identique, sauf qu'il supprime les chaînes qui ne correspondent pas à l'expression régulière. Je n'appellerais pas ces contraires. Si ce n'est pas ce que vous cherchez, vous pouvez peut-être donner quelques exemples.

+0

J'ai ajouté un exemple ci-dessus. – Incognito