2010-09-08 6 views
4
Array(
[1] => put returns (between) paragraphs 
[2] => (for) linebreak (add) 2 spaces at end 
[3] => indent code by 4 (spaces!) 
[4] => to make links 
) 

Vous voulez obtenir un texte entre crochets (pour chaque valeur):Comment aller chercher tout entre parenthèses en PHP?

  1. ne prennent que le premier match
  2. supprimer ce match de la valeur
  3. écrire tous les matches à nouveau tableau

Après f tableaux de égla devraient ressembler à:

Array(
[1] => put returns paragraphs 
[2] => linebreak (add) 2 spaces at end 
[3] => indent code by 4 
[4] => to make links 
) 
Array(
[1] => between 
[2] => for 
[3] => spaces! 
[4] => 
) 

Quelle est la solution?

Répondre

2

j'utiliser l'expression régulière /\((\([^()]*\)|[^()]*)\)/ (ce qui correspond une ou deux paires de parenthèses) avec preg_split:

$matches = array(); 
foreach ($arr as &$value) { 
    $parts = preg_split('/\((\([^()]*\)|[^()]*)\)/', $value, 2, PREG_SPLIT_DELIM_CAPTURE); 
    if (count($parts) > 1) { 
     $matches[] = current(array_splice($parts, 1, 1)); 
     $value = implode('', $parts); 
    } 
} 

Utilisation de preg_split avec PREG_SPLIT_DELIM_CAPTURE L'ensemble d'indicateurs contiendra les séparateurs correspondants dans le tableau des résultats. Donc, une correspondance a été trouvée, il y a au moins trois parties. Dans ce cas, le deuxième membre est celui que nous cherchons. Ce membre est supprimé avec array_splice qui renvoie également le tableau des membres supprimés. Pour obtenir le membre supprimé, current est utilisé sur la valeur de retour de array_splice. Les membres restants sont ensuite remis ensemble.

2

En supposant que vous vouliez dire (between) et non ((between))

$arr = array(
       0 => 'put returns (between) paragraphs', 
       1 => '(for) linebreak (add) 2 spaces at end', 
       2 => 'indent code by 4 (spaces!)', 
       3 => 'to make links'); 
var_dump($arr); 

$new_arr = array(); 
foreach($arr as $key => &$str) { 
     if(preg_match('/(\(.*?\))/',$str,$m)) { 
       $new_arr[] = $m[1]; 
       $str = preg_replace('/\(.*?\)/','',$str,1); 
     } 
     else { 
       $new_arr[] = ''; 
     } 
} 
var_dump($arr); 
var_dump($new_arr); 

Working link

Questions connexes