好的,所以我使用的程序使用PHP脚本。我把它设置为以特定的方式命名剪辑,但有时我们需要更改它来添加一个额外的角色。
现在,根据以下信息,剪辑重命名为:*20_1(XA)*:
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;
}
我想添加的例外是,如果原始剪辑名称的开头只有一个Alpha字符(A001C001.mov),那么脚本会将该剪辑标记为*20_1(A)*,但如果它有两个甚至三个Alpha字符,那么它会添加该字符。我知道脚本中需要受到影响的部分是:
if ($ClipName!="")
{
$Name=$Name." "."(".(strtoupper(substr($ClipName,0,2))).")";
}
如果需要,我可以提供更多的脚本。
您需要像这样组合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).")";
}
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]+).?*$#'
-英语,不限长度(与[A-Z]{1,}
相同)