2

文字列を解析し、メディア プレーヤーのキューの通常の形式に適合しないテレビ番組名の特定の形式を置き換える必要があります。

いくつかの例

表示.名前。2x01 .HDTV.x264は Show.Name である必要があります。S02E01 .HDTV.x264
Show.Name. 10x05 .HDTV.XviD は Show.Name である必要があります。S10E05 .HDTV.XviD

ショー名の後、x の前に 1 桁または 2 桁の数字がある場合があります。出力を常に 2 桁の S にしたいので、必要に応じて先行ゼロを追加します。x の後は常に 2 桁の E でなければなりません。

preg_replace、split、および match 関数のマニュアル ページを調べましたが、ここで何をすべきかがよくわかりませんでした。必要な文字列の部分を一致させることができる/\dx\d{2}/ので、最初に文字列にそのパターンがあるかどうかを確認してから、一致から部分を分割する方法を見つけようと考えていましたが、どこにも行きませんでした.

私は例を使って最善を尽くしているので、正しい方向に私を向けることができれば、それは素晴らしいことです. 現在、私の唯一のテスト領域は PHP 4 のインストールです。そのため、PHP 5 固有の指示はありません。何が起こっているのかを理解したら、後で必要に応じて PHP 5 用に更新できます :)

4

3 に答える 3

1

関数を使用する別の方法preg_replace_callback():

$subject = <<<'LOD'
Show.Name.2x01.HDTV.x264 should be Show.Name.S02E01.HDTV.x264
Show.Name.10x05.HDTV.XviD should be Show.Name.S10E05.HDTV.XviD
LOD;

$pattern = '~([0-9]++)x([0-9]++)~i';
$callback = function ($match) {
    return sprintf("S%02sE%02s", $match[1], $match[2]);
};

$result = preg_replace_callback($pattern, $callback, $subject);

print_r($result);
于 2013-10-26T06:48:42.600 に答える
1

PHP4#sprintf以下を使用したソリューションとしての別のアプローチ。

$text = preg_replace('/([0-9]{1,2})x([0-9]{2})/ie',
                     'sprintf("S%02dE%02d", $1, $2)', $text);

注意:e修飾子の使用はPHP5.5から減価償却されているため、使用してください。preg_replace_callback()

$text = preg_replace_callback('/([0-9]{1,2})x([0-9]{2})/', 
      function($m) {
         return sprintf("S%02dE%02d", $m[1], $m[2]);
      }, $text);

出力

Show.Name.S02E01.HDTV.x264
Show.Name.S10E05.HDTV.XviD

実際のデモを見る

于 2013-10-26T07:00:37.177 に答える
1

preg_replace は、探している関数です。

正しい場所を選択する正規表現パターンを作成する必要があります。

  <?php
  $replaced_data = preg_replace("~([0-9]{2})x([0-9]{2})~s", "S$1E$2", $data);
  $replaced_data = preg_replace("~S([1-9]{1})E~s", "S0$1E", $replaced_data);
  ?>

申し訳ありませんが、テストできませんでしたが、動作するはずです。

于 2013-10-26T06:10:40.023 に答える