2013-07-03 73 views
0

好的,我使用的程序使用PHP腳本。我已經設置了以特定方式命名剪輯,但有時我們需要更改它以添加額外的字符。基於下面的信息* 20_1(XA)*PHP - 爲腳本添加異常

眼下,夾重命名爲

Scene: 20 
Take: 1 
Slate: 
Clipname: XA001C001.mov 
Select: 

這是腳本做到這一點:

function GenerateClipname($Scene,$Slate,$Take,$ClipName,$Select) 
{ 
    global $link; 
    global $NoSCounter; 
    global $NoTCounter; 

    $sql="SELECT count(ID) AS Counter FROM shots WHERE Scene='".SqlEscape($Scene)."' AND Select='".SqlEscape($Select)."' AND Take='".SqlEscape($Take)."'"; 
    $ScanResult=mysql_query($sql,$link); 
    $ScanRow = mysql_fetch_array($ScanResult); 
    if ($Scene=="") 
    { 
     $Scene=sprintf("NoScene_%d",$NoSCounter); 
     $NoSCounter++; 
    } 
    if ($Take=="") 
    { 
     $Take=sprintf("NoTake_%d",$NoTCounter); 
     $NoTCounter++; 
    } 
    $Name=$Scene; 
    if ($Take!="") $Name.="_".$Take; 
    if ($ClipName!="") 
    { 
     $Name=$Name." "."(".(strtoupper(substr($ClipName,0,2))).")";  
    } 

    if ($Select) $Name.="*"; 
    return $Name; 
} 

我想補充的例外是,如果原始Clipname在開頭只有1個Alpha字符(A001C001.mov),那麼腳本會將該剪輯標記爲* 20_1(A)*,但是如果它有兩個,甚至三個Alpha字符,那麼它會補充說。我知道腳本中需要受到影響的部分是:

if ($ClipName!="") 
    { 
     $Name=$Name." "."(".(strtoupper(substr($ClipName,0,2))).")";  
    } 

如果需要,我可以提供更多的腳本。

回答

0

您需要的preg_match和strpos這樣的結合:在你的情況(在某處你的腳本粘貼功能)

function findFirstNonDigitPart($str) { 
    $pat = '(\d+)'; 
    preg_match($pat,$str,$matches); 
    if(count($matches) == 0) { 
     return false; 
    } 
    $pos = strpos($str,$matches[0]); 
    return substr($str,0,$pos); 
} 


$str = "XSA1234234asfaf"; 
echo findFirstNonDigitPart($str); 

這將是:

if ($ClipName!="") { 
    $part = findFirstNonDigitPart($ClipName); 
    if($part === false) { 
     throw new Exception("Something wrong with the clipname"); 
    } 
    $Name=$Name." "."(".strtoupper($part).")";  
} 
+0

謝謝。現在,我會在上面提供的腳本中添加哪些內容?我正在嘗試一些嘗試,但當然,我很新 –

+0

謝謝!我將粘貼到腳本中,並讓你知道它是怎麼回事! :) –

+0

我能夠得到這個與你上面提供的信息:)。非常感謝你! –

0
if ($ClipName!="") 
{ 
    $pattern = '#^(\\p{L}{1,3}).?*$#'; // group(letter chars, case insensitive, lenght 1-3) + other 
    $prefix = preg_replace($pattern, '$1', $ClipName); // take matching (first) group as replacement if present 
    if ($prefix == $ClipName) { 
     // nothing extracted (no matching prefix) 
    } else { 
     $Name=$Name." "."(".(strtoupper($prefix).")"; 
    } 
} 

不要知道如何處理各種名稱(例如沒有$前綴)+其他模式以防萬一:

'#^([a-zA-Z]{1,3}).?*$#' - 只有

'#^([a-zA-Z]+).?*$#'英文字母字符 - 英語,無限lenght(同[A-Z]{1,}

+0

感謝您的支持。我將不得不在早上嘗試。該名稱將始終使用Clipname命名,以便它可以使用該前綴:)。在尋找課程的時候,我對自己的腳本編寫和教學仍然很陌生。我喜歡這些東西,並且盡我所能,所以謝謝你! –

+0

我的第一次嘗試我無法得到這個工作。我渾渾噩噩地看看有沒有不正確的東西。不過,我可以從@steven的腳本中獲得腳本:)。謝謝! –