0

完全なファイル パスと名前のセグメントを抽出して、データベースに挿入できるようにする必要があります。これを行うには、PHP で preg_match を使用しています。また、パターン内から各セグメントに名前を付けて、一致の配列が連想配列になるようにしています。次に例を示します。

    $subject = 'c:/files/uk/kent/ashford/12345_Joe_Blogs_20120202120000.pdf';
    $pattern = '/[\/\\\\](?<country>.*)[\/\\\\](?<county>.*)[\/\\\\](?<town>.*)[\/\\\\](?<id>.*)_(?<first_name>.*)_(?<last_name>.*)_(?<datetime>.*)\.(?<file_extension>pdf)/';
    preg_match($pattern, $subject, $matches);
    foreach($matches as $key => $match)
    {
        if(is_numeric($key))
            unset($matches[$key]);
    }
    print_r($matches);

作成するもの:

    Array
    (
        [country] => files/uk
        [county] => kent
        [town] => ashford
        [id] => 12345
        [first_name] => Joe
        [last_name] => Blogs
        [datetime] => 20120202120000
        [file_extension] => pdf
     )

私の問題は、国には、必要なフォルダーの前にあるすべてのフォルダーが含まれていることです。「files/uk」ではなく「uk」の部分だけが必要です。そのため、「/」または「\」以外のすべてを一致させる方法を知る必要があります。「c:/files」は、構成で事前に設定されているものであれば何でもかまいません。そのため、パターンにその変数やその他の PHP 変数を含めたくありません。

これをGoogleなどで調べましたが、探している答えが見つからないようです。

助けてくれてありがとう。

4

4 に答える 4

0

あなたはこれを試すことができます:

$pattern = '/[\/\\\\](.*)[\/\\\\](?<country>.*)[\/\\\\](?<county>.*)[\/\\\\](?<town>.*)[\/\\\\](?<id>.*)_(?<first_name>.*)_(?<last_name>.*)_(?<datetime>.*)\.(?<file_extension>pdf)/';

その仕事親愛なる..!:)

于 2012-04-30T11:15:50.157 に答える
0

あなたがしていることと一致させたくないことについて、より具体的にしてみてください。

'%(?x)
[/\\\\](?P<country>[^_./\\\\]+)
[/\\\\](?P<county>[^_./\\\\]+)
[/\\\\](?P<town>[^_/\\\\]+)
[/\\\\](?P<id>[^_./\\\\]+)
_(?P<first_name>[^_./\\\\]+)
_(?P<last_name>[^_./\\\\]+)
_(?P<datetime>[^_./\\\\]+)
\.(?P<file_extension>pdf)
%'

どのグループにも複数のディレクトリを表示したくないこと、およびディレクトリ/ファイル名には、明示的に一致するもの以外のアンダースコアまたはピリオドが含まれないことを前提としています。

于 2012-04-30T20:21:04.763 に答える
0

トリッキーな Regex を変更する必要がないように、既存のコードを保持し、basename関数を使用することをお勧めします。

これを試して:

echo basename($matches['country']);
//outputs "uk"
于 2012-04-30T10:54:40.743 に答える
0

正規表現を次のように変更します。

$pattern = '/[\/\\\\](?<folder>.*)[\/\\\\](?<country>.*)[\/\\\\](?<county>.*)[\/\\\\](?<town>.*)[\/\\\\](?<id>.*)_(?<first_name>.*)_(?<last_name>.*)_(?<datetime>.*)\.(?<file_extension>pdf)/';

次に、配列にフォルダーメンバーがあり、後で使用または破棄できます。

于 2012-04-30T10:54:49.290 に答える