0

好的,所以我使用的程序使用 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;
}

我想添加的例外情况是,如果原始剪辑名称的开头只有 1 个 Alpha 字符 (A001C001.mov),那么脚本会将剪辑标记为*20_1 (A)*但如果它有两个甚至三个 Alpha 字符,然后它会添加。我知道需要影响的脚本部分是:

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

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

4

2 回答 2

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).")";
    }
}

不知道您想如何处理各种名称(例如没有 $prefix)+ 其他模式以防万一:

'#^([a-zA-Z]{1,3}).?*$#'- 仅限英文字母字符

'#^([a-zA-Z]+).?*$#'- 英文,不限长度(同[A-Z]{1,}

于 2013-07-03T06:28:08.823 回答
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).")";    
}
于 2013-07-03T04:46:21.117 回答