我有一個任務要完成,並且我一直在嘗試使用正則表達式幾個小時無濟於事。一些幫助和一些教學將不勝感激。 .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,那麼我的正則表達式匹配EN中的TOKEN,並且也改變了這種情況,但是弄亂了整個文件:
TOK#Changed by ....
所以,有幾個問題:
由於每個鍵應該是唯一的,我應該甚至可以使用正則表達式的呢?我應該使用更快/更清潔/更好的方法嗎?
爲什麼當我將
^
添加到與preg_replace
一致的正則表達式中時,這不匹配行的開始並擺脫我的TOKEN匹配問題?preg_replace('~^'.$key.'\s?=[^\n$]+~iu',$newEntry,$content)
這的確是從一個文件來,但它正在通過Ajax的Web界面進行編輯。 – key2starz
我建議讓跟蹤部分與ini文件分開。您可以在單獨的文件或數據庫中執行此操作。如果你不這樣做,你最終只會爲大量的信息加載一個大文件。我提供的正則表達式將用於搜索和替換部分。 – evan