私は達成すべき課題があります。私は時間をかけて正規表現で無駄にしようとしています。少しの助けといくつかの教えは高く評価されます。 .iniファイルの形式は次のとおりです。.iniファイルのキー値を変更する最適な方法は何ですか?
ES=Spanish
EN=English
TOKEN=Token
FILES=Files
私のルーチンの目標は
- にあるそのキーの現在の値が何であるかを
- 図アウト、変更する必要があるキーを取得し、
- 古い値とそれを変更した人のコメントを追加してください。
- 値を変更してください。
私はえいごで英語からENに属する値を変更したいのであれば、例えば、私はで終わるでしょう:
ES=Spanish
#Changed by Jane Doe on <date>
#Old value: EN=English
EN=Eigo
TOKEN=Token
FILES=Files
マイコード:
$content = "EN=English\n"
. "ES=Spanish\n"
. "TOKEN=Token\n"
. "FILES=Files\n";
$key = 'EN';
$newValue = 'Eigo";
$editor = 'Jane Doe';
//get the old value
$matches = array();
preg_match('~'.$key.'\s?=[^\n$]+~iu',$content,$matches);
$commentLines = '# Change by ' . $editor . ' on ' . date("m/d/Y g:i a") . "\n";
$commentLines .= '# Old value: ' . $matches[0] . "\n";
$newValueLine = $key.'='.$newValue. "\n";
$newEntry = $commentLines . $newValueLine;
$content = preg_replace('~'.$key.'\s?=[^\n$]+~iu',$newEntry,$content);
このENのような短い文字列のキーを変更した場合、私の正規表現はTOKENのENと一致し、それも変更されますが、ファイル全体が壊れることに気付くまで、うまくいきました:
TOK#Changed by ....
ので、いくつかの質問:各キーは一意である必要がありますので
、私もこのために正規表現を使用すべきですか?私が使用すべきより速い/クリーナー/より良い方法がありますか?
preg_replace
の行の正規表現に^
を追加すると、なぜこれが行頭に一致せず、TOKENの一致問題を解決できないのですか?preg_replace('~^'.$key.'\s?=[^\n$]+~iu',$newEntry,$content)
それは実際にファイルから来ているが、それは、Ajaxウェブインタフェースを介して編集されています。 – key2starz
追跡部分をiniファイルとは別に保存することをお勧めします。これは、別のファイルまたはデータベースで行うことができます。そうしなければ、最終的にはほんの数枚の情報のために大きなファイルがロードされます。私が提供した正規表現は検索と置換のために機能します。 – evan