2011-05-10 3 views
0

私は正規表現の周りに私の頭を包んでしようとしているが、これについていくつかの助けに感謝します。PHPの正規表現のパターンヘルプ -

与えられた文字列はようにPHPで、この文字列を解析しようとすると"38min *08min 38 *08min 36 *01min *26 50 *15min *41 *11min *41"

です:私は出力にこのようなものが必要

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

答えて

0

*区切り文字は一見支離滅裂なので、私はそれのためにひどく複雑な正規表現を使用します。

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

があなたに与える:

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 
     ) 

) 

をあなたは[1]を組み立て直す必要があるでしょうし、あなたの望む文字列の[2]と[3]のエントリ。

+0

おかげマリオ Iは、次の出力を取得: アレイ([0] =>配列([0] => 38min * [1] => 38)[1] =>配列([0] =>を08] 36 [1] => 08 [2] => 36)[3] =>配列([0] 0] => 01min * 26 50 [1] => 01 [2] => 26 [3] => 50)[4] =>配列([0] => 15min * 41 [1] => 15 [2] (0)=> 11min * 41 [1] => 11 [2] => 41)[6] =>配列([0] => 11min * 41 [1] ]] => 11 [2] => 41)[7] =>配列([0] => 11min * 41 [1] => 11 [2] => 41)[8] =>配列\ ... そして、それは続ける。 しかし、私はそれとあなたが与えたものを試してみよう。 ありがとうございました – airnet

+0

それは大丈夫です。 'foreach($ match as $ row){array_shift($ row);}を使うことができます。エコーimplode( "、"、$行)、 "\ n"; } 'あなたが望む出力を得るためには、私は信じています。 – mario

0

どのようなものについて:

データが $instrである
$arr = explode($inStr, '*'); 
for ($i = 0; $i < sizeof($arr); $i += 1) { 
    $arr[$i] = str_replace('min', ',', $arr[$i]); 
} 

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)); 
} 

これは実際には正規表現の問題ではありませんが、そのコードは機能するはずです。