2010-12-01 5 views
1

Предположим, что мы имеем это регулярное выражение:PHP - preg_match - присвоить произвольное значение для совпавшего элемента

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

сейчас, когда матч регулярного выражения для экс. один из трех методов XBOX (Xbox | xbox360 | 360), то $matches должен вернуться только XBOX

это возможно продолжает работать в preg_match() контексте или я должен использовать другой метод?

спасибо заранее.

Редакция:

им на самом деле делает это так:

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

я задаюсь вопросом, если есть другой путь!

ответ

2

ваш текущий код выглядит нормально для меня, если вы хотите немного фантазера, вы можете попробовать названные подшаблоны

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

или preg_replac'ing вещей перед сопоставлением:

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

на больших входах Я предполагаю, что ваш метод будет самым быстрым. Небольшое усовершенствование было бы заменить in_array с хэш на основе поиска:

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

назвали подмасками: см http://www.php.net/manual/en/regexp.reference.subpatterns.php и http://php.net/manual/en/function.preg-match-all.php, пример 3

+0

TNX у очень много, ваши регулярные выражения скалы! ;) можете ли вы объяснить часть (? P xbox | xbox360 | 360)? –

+0

tnx много, я сделаю! ;) Мне понравилось использование isset() вместо in_array(). –

+0

ах, и еще что-то ... ваше первое добавление '/ \ b ((? P xbox | xbox360 | 360) | pc | ps3 | wii) \ b/i' - это тот, который задает вопрос (для людей, которые могут иметь одинаковые потребности)! –

Смежные вопросы