2012-09-18 28 views
-5

我希望能夠電視劇情節轉換從#7.11S07E11PHP正則表達式(或函數)轉換成字符串

比如我有串Monk #7.11Family Guy #5.6 ,我想申請一個正則表達式/函數並接收而不是Monk S07E11Family Guy S05E06

+0

你可以在這裏製作完美的正則表達式http://gskinner.com/RegExr/ – janosrusiczki

+0

感謝你的鏈接,我會玩它。 –

+0

@hsz是的,它工作得很好。感謝您的幫助。 –

回答

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 
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 

它允許您提供用來轉換輸入功能的回調。

DEMO

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 

測試此代碼here