-1

私はいくつかの文字列を持っています

$str1 = "Audi-TT-RS-2012-widescreen-77.jpg";
$str2 = "Audi-R8-widescreen-039.jpg";
$str3 = "2008-bmw-6-series-front-and-side.jpg";
$str4 = "Opel_tigra_2-doors-21313.jpg"; //where 21313 is an id that want to be removed also.

年と車の「モデル」以外のすべての数字を削除する関数を作りたいです。数字が年なのか、モデル番号なのかIDなのかを正確に検出する方法がわかりません。ありがとうございました

4

2 に答える 2

0

19と20で始まる4桁の数字(車が2000年より古い場合は20のみ)と文字列の最後のドットの前の数字(ある場合)をすべて削除できると思います...しかし、誰がそれを知っていますかあなたが提供した情報で100%正確になります(命名パターンの欠如)。

于 2013-01-25T02:36:54.813 に答える
0
$str1 = "Audi-TT-RS-2012-widescreen-77.jpg";
$str2 = "Audi-R8-widescreen-039.jpg";
$str3 = "2008-bmw-6-series-front-and-side.jpg";
$str4 = "Opel_tigra_2-doors-21313.jpg";
$strs = array($str1, $str2, $str3, $str4);
foreach ($strs as $str) {
    preg_match_all('/(?<!\d)(\d{4})(?!\d)\-*/', $str, $matches);
    foreach ($matches[1] as $year) {
        if (abs($year - date("Y")) < 100) {
            // this is within 100 years
        }
    }
}

番号の削除

$str1 = "Audi-TT-RS-2012-widescreen-77.jpg";
$str2 = "Audi-R8-widescreen-039.jpg";
$str3 = "2008-bmw-6-series-front-and-side.jpg";
$str4 = "Opel_tigra_2-doors-21313.jpg";
$strs = array($str1, $str2, $str3, $str4);
foreach ($strs as $str) {
    preg_match_all('/(?<!\d)(\d{4})(?!\d)\-*/', $str, $matches);
    foreach ($matches[1] as $year) {
        if (abs($year - date("Y")) < 100) {
            $str =  preg_replace('/(?<!\d)(\d{4})(?!\d)/', '[year]', $str);
        }
    }
    preg_match_all('/(?<!\d)(\d{1})(?!\d)\-*/', $str, $matches);
    foreach ($matches[1] as $model) {
        $str =  preg_replace('/(?<!\d)(\d{1})(?!\d)/', '[model]', $str);
    }

    preg_match_all('/\-*(\d+)\-*/', $str, $matches);
    foreach ($matches[1] as $id) {
        $str =  preg_replace('/\-*(\d+)\-*/', '', $str);
    }
    $str =  preg_replace('/\[year\]/', $year, $str);
    $str =  preg_replace('/\[model\]/', $model, $str);
    echo $str."<br>";
}
于 2013-01-25T02:45:44.977 に答える