私は、正規表現の2番目に単純な型(いくつかの文字列から一致する文字列を抽出し、それを使用する)を考えていたものをハッキングするが、正規表現のグループ化は、 。php最も単純な正規表現の置き換えだけどbacktracesは動作しない
目的
- コマンドが正しい名前形式を持っているファイルをコピー/フォーマットする、出力をファイルの
ls
を取ります。 - ファイルのサイズを変更してサムネイルを作成します。私は結果を得るとき、私はちょうど、単一の正規表現のグループ以外のすべてをフィルタリングしたいがため
失敗
は私のコードでは、正規表現の段階で失敗した(でもまだそのステップを扱っていません)それは、私が決して最初のバックトレースグループを要求していなくても、私が望むグループとそれ以前のグループを常に返しています。私はそれがすべてでは問題を期待していませんが、 http://ideone.com/2RiqN
をそしてここで切り倒した初期データセットとコード(ある:ここで
は、オンラインIDE上のコードの完全に機能する、実行可能なバージョンです。 ):正規表現のための<?php
// Long list of image names.
$file_data = <<<HEREDOC
07184_A.jpg
Adrian-Chelsea-C08752_A.jpg
Air-Adams-Cap-Toe-Oxford-C09167_A.jpg
Air-Adams-Split-Toe-Oxford-C09161_A.jpg
Air-Adams-Venetian-C09165_A.jpg
Air-Aiden-Casual-Camp-Moc-C09347_A.jpg
C05820_A.jpg
C06588_A.jpg
Air-Aiden-Classic-Bit-C09007_A.jpg
Work-Moc-Toe-Boot-C09095_A.jpg
HEREDOC;
if($file_data){
$files = preg_split("/[\s,]+/", $file_data);
// Split up the files based on the newlines.
}
$rename_candidates = array();
$i = 0;
foreach($files as $file){
$string = $file;
$pattern = '#(\w)(\d+)_A\.jpg$#i';
// Use the second regex group for the results.
$replacement = '$2';
// This should return only group 2 (any number of digits), but instead group 1 is somehow always in there.
$new_file_part = preg_replace($pattern, $replacement, $string);
// Example good end result: <img src="images/ch/ch-07184fs.jpg" width="350" border="0">
// Save the rename results for further processing later.
$rename_candidates[$i]=array('file'=>$file, 'new_file'=>$new_file_part);
// Rename the images into a standard format.
echo "cp ".$file." ./ch/ch-".$new_file_part."fs.jpg;";
// Echo out some commands for later.
echo "<br>";
$i++;
if($i>10){break;} // Just deal with the first 10 for now.
}
?>
意図する結果:788750 コード出力)の(複数行のための結果を対象:CP空気何か代-C485850_A.jpg ./ch/ch-485850.jpg。
私の正規表現で何が問題になっていますか?より簡単なマッチングコードの提案も高く評価されます。
コードの外見から、 '_A.jpg'と' C'文字は切り捨てられますが、最初の部分のファイル名と番号は残ります。これはあなたが意図したものですか? (あなたは何が起こったのか、何が期待されたのかを例証しなかった。) – mario
あなたの失敗は、オペレーティングシステムコマンドの広告のinfinitemの導入、出力の中断、および誰かが正規表現の問題を修正できるようになることを期待することによってもたらされます。システムのロジスティクスを忘れて、あなたの投稿に正規表現の領域を残してください。正規表現でのみ期待されるテキストと結果。 – sln