2010-12-01 11 views
1

en supposant que nous avons cette regex:PHP - preg_match - attribuer une valeur arbitraire à un élément adapté

preg_match('/\b(xbox|xbox360|360|pc|ps3|wii)\b/i' , $string, $matches); 

maintenant, chaque fois que le match de regex par ex. l'une des trois méthodes de xbox (xbox | xbox360 | 360), le $matches, devrait revenir juste XBOX

est-ce possible de continuer à travailler dans le contexte preg_match() ou devrais-je utiliser une autre méthode?

merci d'avance.

ÉDITÉE:

im en fait le faire comme ceci:

$x = array('xbox360','xbox','360'); 
if(preg_match('/\b(xbox360|xbox|360|pc|ps3)\b/i', $s, $m)) { 
    $t = $m[0]; 
} 
if (in_array($t,$x)) { 
    $t = 'XBOX'; 
} 

Je me demande s'il y a une autre façon!

Répondre

2

votre code actuel me semble ok, si vous voulez un peu de fantaisie, vous pouvez essayer le nom des sous-modèles

preg_match('/\b((?P<XBOX>xbox|xbox360|360)|pc|ps3|wii)\b/i' , $string, $matches); 
$t = isset($matches['XBOX']) ? 'XBOX' : $matches[0]; 

ou des choses preg_replac'ing avant correspondant:

$string = preg_replace('~\b(xbox|xbox360|360)\b~', 'XBOX', $string); 
preg_match('/\b(XBOX|pc|ps3|wii)\b/i' , $string, $matches); 

sur les grandes entrées Je suppose que votre méthode serait la plus rapide. Une légère amélioration serait de remplacer in_array avec une recherche par hachage:

$x = array('xbox360' => 1,'xbox' => 1,'360' => 1); 
if(preg_match('/\b(xbox360|xbox|360|pc|ps3)\b/i', $s, $m)) { 
    $t = $m[0]; 
} 
if (isset($x[$t]) { 
    $t = 'XBOX'; 
} 

sous-masques nommés: voir http://www.php.net/manual/en/regexp.reference.subpatterns.php et http://php.net/manual/en/function.preg-match-all.php, par exemple 3

+0

TNX y beaucoup, vos roches regex! ;) pouvez-vous expliquer la partie (? P xbox | xbox360 | 360)? –

+0

tnx beaucoup, je le ferai! ;) j'ai aimé l'utilisation de isset() au lieu de in_array(). –

+0

ah, et une autre chose ... votre premier ajout '/ \ b ((? P xbox | xbox360 | 360) | pc | ps3 | wii) \ b/i' est celui qui pose la question (pour les personnes qui peut avoir les mêmes besoins)! –