2010-12-01 6 views
1

vorausgesetzt, wir haben diese regex:PHP - preg_match - zuweisen beliebigen Wert an ein angepaßtes Element

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

jetzt, wenn die Regex für ex. einer der drei xbox Methoden (xbox | xbox360 | 360), die $matches sollte nur zurück XBOX

ist dies möglich, weiterhin im preg_match() Kontext arbeiten oder ich sollte eine andere Methode verwenden?

danke im voraus.

EDITED:

$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'; 
} 

frage ich mich, wenn eine andere Art und Weise gibt es:

im wie diese es tatsächlich zu tun!

Antwort

2

Ihren aktuellen Code zu mir ok aussieht, wenn man es ein bisschen schicker möchten, können Sie versuchen Subpattern namens

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

oder Dinge preg_replac'ing vor passender:

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

auf große Eingänge Ich denke, deine Methode wäre die schnellste. Eine geringfügige Verbesserung wäre in_array mit einem Hash-basierten Lookup zu ersetzen:

$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'; 
} 

genannt Subpattern: siehe http://www.php.net/manual/en/regexp.reference.subpatterns.php und http://php.net/manual/en/function.preg-match-all.php, Beispiel 3

+0

tnx y sehr viel, Ihr regex rock! ;) kannst du den (? P xbox | xbox360 | 360) teil erklären? –

+0

tnx viel, ich werde tun! ;) Ich mochte die Verwendung von isset() anstelle von in_array(). –

+0

ah, und eine andere Sache ... deine erste add '/ \ b ((? P xbox | xbox360 | 360) | pc | ps3 | wii) \ b/i' ist derjenige, der die Frage stellen (für Leute, die kann die gleichen Bedürfnisse haben)! –