0

私は preg_match_all などの経験があまりなく、次のことを行う簡単な方法を探しています:

次のテキストを検討してください。

$string = 'This text was written on [set_stamp]1341066037[/set_stamp] and this one on [set_stamp]1340903119[/set_stamp].';

私は何をする必要がありますか:

  1. すべてのタグ間のデータ (ここではタイムスタンプ) を取得[set_stamp]し、[/set_stamp]
  2. キャプチャされたすべてのタイムスタンプを、次のような対応する日付に置き換えます。date('Y-m-d H:i:s', $timestamp)
  3. [set_stamp]タグと[/set_stamp]タグをすべて削除

最終的な出力は次のようになります。

「このテキストは 2012-07-12 14:26 に書かれ、これは 2012-07-11 17:10 に書かれました。」

4

1 に答える 1

0

preg_replace_callback()次の正規表現で使用できます。

#\[set_stamp\](.+)\[/set_stamp\]#iU

コード例:

$string = 'This text was written on [set_stamp]1341066037[/set_stamp] and this one on [set_stamp]1340903119[/set_stamp].';
echo preg_replace_callback('#\[set_stamp\](.+)\[/set_stamp\]#iU', function($m) {
    return date('Y-m-d H:i', $m[1]);
}, $string);

そのコードの出力は次のとおりです。

このテキストは 2012-06-30 16:20 に書かれ、これは 2012-06-28 19:05 に書かれました。

無名関数には少なくとも PHP 5.3 が必要であることに注意してください。古いバージョンを使用していて本当に更新できない場合は、通常の関数を作成し、その名前を文字列として渡すだけです。

于 2012-07-02T22:19:09.483 に答える