2011-05-10 4 views
0

J'essaye d'enrouler ma tête autour de regex, mais apprécierais de l'aide sur ceci.php regex aide de modèle -

La chaîne est "38min *08min 38 *08min 36 *01min *26 50 *15min *41 *11min *41"

Essayer d'analyser cette chaîne en PHP de sorte que:

arr[0] = "38" 
arr[1] = "08,38" 
arr[2] = "08, 36" 
arr[3] = "01, 26, 50" 
arr[4] = "15, 41" 
arr[5] = "11, 41" 

je besoin d'un quelque chose de sortie comme celui-ci.

Répondre

0

Depuis les * délimiteurs apparemment sont incohérentes, j'utilise un regex terriblement complexe pour que:

preg_match_all('# 
     (\d+)min[\s*]+ 
     (?: 
      (\d+)(?!min|\d) 
       (?: 
        [\s*]+(\d+)(?!min|\d) 
       )? 
     )?#x', 
     $string, $matches, PREG_SET_ORDER); 
print_r($matches); 

Vous donne:

Array 
(
    [0] => Array 
     (
      [0] => 38min * 
      [1] => 38 
     ) 

    [1] => Array 
     (
      [0] => 08min 38 
      [1] => 08 
      [2] => 38 
     ) 

    [2] => Array 
     (
      [0] => 08min 36 
      [1] => 08 
      [2] => 36 
     ) 

    [3] => Array 
     (
      [0] => 01min *26 50 
      [1] => 01 
      [2] => 26 
      [3] => 50 
     ) 

    [4] => Array 
     (
      [0] => 15min *41 
      [1] => 15 
      [2] => 41 
     ) 

    [5] => Array 
     (
      [0] => 11min *41 
      [1] => 11 
      [2] => 41 
     ) 

) 

Vous devrez remonter le [1] et [2] et [3] entrées pour vos chaînes désirées.

+0

Merci Mario Je reçois la sortie suivante: Array ([0] => Array ([0] => 38min * [1] => 38) [1] => Array ([0] => 08min 38 [1] => 08 [2] => 38) [2] => Tableau ([0] => 08min 36 [1] => 08 [2] => 36) [3] => Tableau ([ 0] => 01min * 26 50 [1] => 01 [2] => 26 [3] => 50) [4] => Tableau ([0] => 15min * 41 [1] => 15 [2 ] => 41) [5] => Tableau ([0] => 11min * 41 [1] => 11 [2] => 41) [6] => Tableau ([0] => 11min * 41 [1 ] => 11 [2] => 41) [7] => Tableau ([0] => 11min * 41 [1] => 11 [2] => 41) [8] => Tableau \ ... Et ça continue Mais je vais essayer de travailler avec et ce que vous avez donné Merci – airnet

+0

Cela semble correct. Vous pouvez utiliser 'foreach ($ match comme $ row) {array_shift ($ row); echo implode (",", $ row), "\ n"; } 'pour obtenir votre sortie souhaitée, je crois. – mario

0

Que diriez-vous quelque chose comme:

$arr = explode($inStr, '*'); 
for ($i = 0; $i < sizeof($arr); $i += 1) { 
    $arr[$i] = str_replace('min', ',', $arr[$i]); 
} 

où vos données sont en $instr.

1
$str = "38min *08min 38 *08min 36 *01min *26 50 *15min *41 *11min *41"; 
$parts = split('*', $str); 

$result = array(); 
foreach ($parts as $part) { 
    $result[] = trim(str_replace('min', ', ', $part)); 
} 

Ce n'est pas vraiment un problème de regex, mais ce code devrait fonctionner.