-5

我希望能够将电视剧的剧集#7.11S07E11

例如,我有字符串Monk #7.11orFamily Guy #5.6 并且我想应用正则表达式/函数并接收Monk S07E11or Family Guy S05E06

4

3 回答 3

3

使用preg_replace_callback

function convert($matches) {
  $season = str_pad($matches[1], 2, "0", STR_PAD_LEFT);
  $episode = str_pad($matches[2], 2, "0", STR_PAD_LEFT);
  return "S" . $season . "E" . $episode;
}

echo preg_replace_callback("/#(\d+)\.(\d+)/", "convert", "Monk #7.11");
// Monk S07E11  
echo preg_replace_callback("/#(\d+)\.(\d+)/", "convert", "Family Guy #5.6");
// Family Guy S05E06

它允许您提供用于转换输入的函数回调。

演示

于 2012-09-18T12:52:02.827 回答
2
<?php

$regex="/^([^#]+?) *#([0-9]+)\.([0-9]+)$/";
$fmt="%s S%02dE%02d\n";

$items=array(
    "Family Guy #5.6",
    "Monk #7.11",
);

foreach ($items as $one) {
    preg_match($regex, $one, $matches);
    printf($fmt, $matches[1], $matches[2], $matches[3]);
}

回报:

Family Guy S05E06
Monk S07E11
于 2012-09-18T13:05:35.213 回答
1

PHP代码:

$s = 'Monk #7.11';
$p = '/^([^#]+\s)#(\d+)\.(\d+)$/e';
$r = 'sprintf("%sS%02dE%02d", "$1", "$2", "$3")';
echo preg_replace($p, $r, $s);

输出:

Monk S07E11

在此处测试此代码。

于 2012-09-18T13:16:00.903 回答