0

CSVファイルの約45k行で「検索と置換」を実行してから、これをデータベースに配置する必要があります。

PHPとpreg_replaceでこれを実行できるはずだと思いましたが、式を理解できないようです...

行は1つのフィールドで構成され、すべて次の形式になっています。

"./1/024/9780310320241/SPSTANDARD.9780310320241.jpg"または"./t/fla/8204909_flat/SPSTANDARD.8204909_flat.jpg"

最初の部分は常にピリオド、2番目の部分は常に1文字の英数字、3番目の部分は常に3文字の英数字、4番目の部分は常に1〜13文字の英数字になります。

私は正しいと思われる次のことを思いつきましたが、正規表現についてはまったく知らないことを公然と公言します。それは私にとって少し新しいことです。私はおそらくここでたくさんのばかげた間違いを犯しています...

$pattern = "/^(\.\/[0-9a-zA-Z]{1}\/[0-9a-zA-Z]{3}\/[0-9a-zA-Z]{1,13}\/)$/";
$new = preg_replace($pattern, " ", $i);

とにかく、すべての助けに感謝します!

ありがとう、フィル

4

5 に答える 5

1

私が勧める唯一の間違いは、$削除する必要のある弦の端のアンカーです。そして、あなたの表現にも文字が欠けてい_ます:

/^(\.\/[0-9a-zA-Z]{1}\/[0-9a-zA-Z]{3}\/[0-9a-zA-Z_]{1,13}\/)/

より一般的なパターンは、/:を除外することです。

/^(\.\/[^\/]{1}\/[^\/]{3}\/[^\/]{1,13}\/)/
于 2009-09-08T10:24:52.287 に答える
1

パターンを照合する前に、csvから値を抽出するためにPHPの組み込みパーサーを使用する必要があります。

于 2009-09-08T10:30:04.833 に答える
0

は文字列の$終わりを意味します。だからあなたのパターンは一致./1/024/9780310320241/./t/fla/8204909_flat/、彼らが彼らのライン上に一人でいた場合。を削除する$と、文字列の最初の4つの部分と一致し、スペースに置き換えられます。

于 2009-09-08T10:25:24.173 に答える
0
$pattern = "/(\.\/[0-9a-z]{1}\/[0-9a-z]{3}\/[0-9a-z\_]+\.(jpg|bmp|jpeg|png))\n/is";

先ほど見たように、サンプルの文字列は/で終わっていないので、最後にパターンから削除する必要があるかもしれません。また、ファイル名にはアンダースコアが使用されており、文字クラスに含める必要があります。

于 2009-09-08T10:26:21.020 に答える
0

あなたが何を求めているのか理解できません。ファイル内のすべての行がそのように見え、それらすべてを処理したいということですか?もしそうなら、この正規表現はトリックを行います:

'#^.*/#' 

これは、最後のスラッシュまでのすべてに一致します。これは、誰もが話している不正な「$」がなかった場合に正規表現が行うことです。そのままにしておきたい他の形式の他の行がある場合、この正規表現はおそらくあなたのニーズに合うでしょう:

'#^\./\w/\w{3}/\w{1,13}/#"

正規表現の区切り文字を「/」から「#」に変更したので、内部のスラッシュをエスケープする必要がないことに注意してください。区切り文字にはほとんどすべての句読文字を使用できます(ただし、もちろん両方とも同じである必要があります)。

于 2009-09-08T10:49:53.110 に答える