-2

私はこの方法を使用しています:

$matches;
preg_match('/^days:\s(.*)$/', $line, $matches);
if (count($matches) > 1)
  return explode('; ', $matches[1]);
return array();

次のような行を含むファイル:

days: Monday; Thursday; Friday

そして、最初の結果 (例ではMonday) には、次のように常に " days:" の部分が追加されます。

array[0](
  myObject=>object
  (
    visitors[0]=>array //notice "visitors" is the problem.  It should be "days".
    (
      [0]=>days: Monday
      [1]=>Thursday
      [2]=>Friday
    )
  )
)

正規表現は角かっこ ( ) 内にあるものを返すはずだと思いました()か?

4

2 に答える 2

2

$matches[0]括弧でキャプチャされたものだけでなく、常に一致全体 (一致をトリガーした完全な文字列) が含まれます。これは、ほとんどの (すべての?) 正規表現ライブラリで標準です。キャプチャされた式は 1 から始まります。

于 2012-09-12T14:06:09.540 に答える
1

nickb が指摘したように、コードは問題なく動作するようです。おそらく、あなたがそれを手書きしたとき、実際には製品コードの問題を修正したでしょう。または、表示されているバグは、コードの別の部分で発生している何かの結果である可能性があります。

これは私が実行したときに得られるものです

$line = "days: Monday; Thursday; Friday";
preg_match('/^days:\s(.*)$/', $line, $matches);
if (count($matches) > 1)
   var_dump(explode('; ', $matches[1]));

配列(3) { [0]=> 文字列(6) "月曜日" [1]=> 文字列(8) "木曜日" [2]=> 文字列(6) "金曜日" }

于 2012-09-12T14:20:54.007 に答える