2017-09-20 11 views
0

「Doc 16_1.pdf」のようなファイル名があり、その名前がpreg_matchであるかどうかをチェックする必要があります。一致する場合は、次の番号が 'Doc 16_2.pdf'一致する名前がアンダースコアの場合は

'/(?:(?: \(_[\d]+\))?(\.[^.]+))?$/' 

$ name = 'Doc 16';私は上記するpreg_matchを試してみましたが、その一致する結果を返さない

protected function upcount_name_callback($matches) { 
    print_r($matches); 
    $index = isset($matches[1]) ? ((int)$matches[1]) + 1 : 1;   
    $ext = isset($matches[2]) ? $matches[2] : '';   
    $nm = '_'.$index.$ext;   
    return $nm; 
} 

のようなインクリメント

return preg_replace_callback(
     /(?:(?: \(_[\d]+\))?(\.[^.]+))?$/, 
     array($this, 'upcount_name_callback'), 
     $name, 
     1 
    ); 

のようにチェック

イム。

私を助けてもらえますか、ありがとうございます。

+0

たぶん、 ' '〜_ \ dは+ \ [^] + $〜''でしょうか? –

+0

サンプル入力とは何ですか、希望の出力は何ですか? – delboy1978uk

+0

いくつか例を挙げてもらえますか?私はそれが正しいと確信していません – Andreas

答えて

0

これを出発点にしてください。

<?php 
if (preg_match("/^(.*)_(\d*)\.pdf$/", $filename, $output)) { 
    $docname = $output[1]; 
    $num = (int)$output[2]; 
} 
?> 

1桁以上の数字

  • (\.[^.]+)?: - アンダースコア
  • (\d+) - グループ1($m[1]http://www.phpliveregex.com/p/lns

  • 0

    あなたは

    preg_replace_callback('/_(\d+)(\.[^.]+)?$/', function($m) { 
        return "_" . ($m[1]+1) . $m[2]; 
    },$name); 
    

    詳細

    • _を使用して番号をインクリメントします - オプションのgr oup 2($m[2]):.
    • $ - 文字列の末尾以外の1つ以上の文字。

    PHP demoを参照してください:

    $name = 'Doc 16_1.pdf'; 
    echo preg_replace_callback('/_(\d+)(\.[^.]+)?$/', function($m) { 
        return "_" . ($m[1]+1) . $m[2]; 
    },$name); 
    
    関連する問題