1
<?php
$str = '17:30 Football 18:30 Meal 20:00 Quiet';
$chars = preg_split('/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r ($chars);
?> 

戻ってきた:

Array ( 
  [0] => Array ( 
    [0] => 17:30 Football 18:30 Meal 20:00 Quiet 
    [1] => 0 
  ) 
) 

私が望んでいた間:

Array ( 
  [0] => Array ( 
    [0] => Football
    [1] => 7 
  ) 
  [1] => Array ( 
    [0] => Meal 
    [1] => 22 
  ) 

  etc.

私に何ができる?

4

3 に答える 3

1

^アンカーと正規表現の周りをドロップする必要があり$ます-それらを配置すると、分割文字列が文字列の先頭から始まり、文字列の末尾で終わる必要があるため、正規表現は決して一致しません-これは、あなたの入力は17:30唯一のものです。

次のように、正規表現にスペース文字を含めることもできます。

$chars = preg_split('/\s*([0-1][0-9]|2[0-3]):([0-5][0-9])\s*/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
于 2010-06-13T20:27:46.117 に答える
0

または:

$chars = preg_split('/\b[0-9:\s]{6,7}\b/', $str,-1,PREG_SPLIT_OFFSET_CAPTURE);

これにより、先頭のスペースが削除されます。

于 2010-06-13T21:24:26.813 に答える
0

正規表現では、^および$記号は、スキャンしているテキスト行のそれぞれ先頭と末尾へのアンカーです。パターンからそれらを削除してみてください。多分次のようなものを試してください:

<?php
$str = '17:30 フットボール 18:30 食事 20:00 静寂';
$chars = preg_split('/(?:[01]\d|2[0-3]):(?:[0-5]\d)/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r ($chars);
?>

:これは正規表現の特殊文字であるため、エスケープする必要があることを忘れないでください。

デフォルトでは、括弧で囲まれたすべてのグループが記憶されますが、?:構文でこれを停止できます。Pythonで式をテストしたため、PHPで問題が発生するかどうかは完全にはわかりませんが、一致が配列に返されないようにする必要があります。

式を少し拡張して、単語の周りの空白を自動的に削除することもできます。

$chars = preg_split('/\s*(?:[01]\d|2[0-3]):(?:[0-5]\d)\s*/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);

お役に立てれば!

于 2010-06-13T20:28:25.217 に答える