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 つしかない場合 (A001C001.mov)、スクリプトはクリップに*20_1 (A)* というラベルを付けますが、アルファ文字が 2 つ、または 3 つある場合は、それを追加します。影響を受ける必要があるスクリプトの部分は次のとおりです。

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 に答える