2010-12-15 70 views
2

Je souhaite utiliser preg_match pour renvoyer un tableau de chaque correspondance pour le sous-masque parenthésé.Correspondances multiples du même type dans preg_match

Je possède ce code:

$input = '[one][two][three]'; 

    if (preg_match('/(\[[a-z0-9]+\])+/i', $input, $matches)) 
    { 
     print_r($matches); 
    } 

Cette impression:

Array ([0] => [one][two][three], [1] => [three]) 

... seulement retourner la chaîne complète et le dernier match. Je voudrais qu'il revienne:

Array ([0] => [one][two][three], [1] => [one], [2] => [two], [3] => [three]) 

Peut-il être fait avec preg_match?

Répondre

2

Utilisez preg_match_all() avec le + abandonné.

$input = '[one][two][three]'; 

if (preg_match_all('/(\[[a-z0-9]+\])/i', $input, $matches)) { 
    print_r($matches); 
} 

donne:

Array 
(
    [0] => Array 
     (
      [0] => [one] 
      [1] => [two] 
      [2] => [three] 
     ), 

    [1] => Array 
     (
      [0] => [one] 
      [1] => [two] 
      [2] => [three] 
     ) 
) 
1
$input = '[one][two][three]'; 

if (preg_match_all('/(\[[a-z0-9]+\])+/iU', $input, $matches)) 
{ 
    print_r($matches); 
}