2

このようなファイルが1248812832.v.docあり、データベースフィールドから文字列とドットを削除して、このようなファイルを作成したい1248812832.doc

このコードを使用していますが、完全には機能しません。文字列とドットが表示されます

<?php
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'alsidik';

$conn = mysql_connect($host, $username, $password);

if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}

if (!mysql_select_db($database)) {
    echo "Unable to select " . $database . ": " . mysql_error();
    exit;
}

$sql = "SELECT * FROM d_jobs";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

while ($row = mysql_fetch_assoc($result)) {
    $id = $row['jb_id'];
    $jb_cv = $row['jb_cv'];
    $jb_rep = preg_replace('/[^.a-z0-9.]/','', $jb_cv);
    $sql = "UPDATE d_jobs set jb_cv='" .$jb_rep. "' where jb_id=" . $id;
    mysql_query($sql);
}

mysql_close($conn);
?>

誰かが私を助けることができます..ありがとう

4

2 に答える 2

4

この文字列をどのように処理するかは言わなかった:

$str = '1212.v.a.doc';

...したがって、この文字列の最初と最後の部分のみが必要であると想定します(部分は「。」記号で区切られます)。これで、あなたはどちらかを使うことができます...

$parts = explode('.', $str);
if (count($parts) > 2) {
  $str = "$parts[0].{$parts[count($parts)-1]}";
}

... また

$str = preg_replace('#(?<=[.])([^.]*[.])+#', '', $str);

この行が失敗する理由:

preg_replace('/[^.a-z0-9.]/','', $jb_cv);

...ここでは、負の文字クラス([^...]partで定義)を使用します。つまり、文字列からドット、小文字のラテン文字、数字を除くすべての記号を消去します。それは間違いなく望んでいたことではないと思います。実際、例の元の文字列はまったく変更されません。

更新:すべてのジャグラリーが無駄だったように見えます。実際に必要なのは数字と拡張子だけです。まあ、それは正規表現でも行うことができます:

$str = '1212.v.a.doc';
$str = preg_replace('#^(\d+).*([.][^.]+)$#', '$1$2', $str);
echo $str;

...しかし実際には、読みやすさだけのために@jeroenのソリューションを好みます。)。

于 2012-10-03T14:27:19.183 に答える
2

解決策の代替案explode:それをキャストしてint拡張機能を元に戻すだけです:

$str = '1248812832abc.v.doc';

$name = (int) $str . '.' .pathinfo($str, PATHINFO_EXTENSION);

var_dump($name);

コードパッドの例

于 2012-10-03T14:44:09.030 に答える