我遇到一個奇怪的問題preg_replace
。它似乎通常使用單個字符串,但是當我帶一個大文本文件(〜1.5MB)時,它似乎什麼都不做。preg_replace和大文本文件解析
我試圖解析鍵值的一個大的文本文件,它具有這樣的結構:
"KeyValues"
{
"Key1" "Value1"
// a comment
"ComplexKey"
{
"ComplexKey1" "ComplexValue1" // another comment
"ComplexKey2" "ComplexValue2"
"FurtherComplexity1"
{
"ComplexKey3" "ComplexValue3"
"ComplexKey4" "ComplexValue4"
}
}
}
我想我做任何分析之前,請從文本文件中的註釋。 preg_replace
看起來像是一個安全的賭注。下面是隻刪除評論中的代碼:
<?php
$filecontent = file_get_contents('file.txt');
$filecontent = preg_replace('!//.*!s', '', $filecontent);
echo $filecontent;
?>
現在,我期待它輸出上面的例子沒有評論,但它只是返回它的開始是完全一樣的字符串。這樣會很奇怪,雖然是我採取單一線路輸出從文本文件,比如這一個:
"ComplexKey1" "ComplexValue1" // another comment
我可以運行該字符串的preg_replace
調用,它會不註釋返回字符串。我想也許是因爲有一些換行符與正則表達式不匹配,所以我在表達式中添加了's'修飾符;然而,這似乎並沒有解決問題。無論出於何種原因,我的preg_replace
調用都不會做任何事情(或者我的正則表達式關閉)。
一個明顯的解決方案就是忽略解析中的註釋,但我在想這裏面一定有一些東西我不知道爲什麼這不起作用。如果可能的話,我真的很想在不更改解析器的情況下解決這個問題。有任何想法嗎?
您正在使用* s(PCRE_DOTALL)*修飾符,您應該瞭解它的第一手功能。不只是嘗試和想知道,而且還有理解。 http://php.net/manual/en/reference.pcre.pattern.modifiers.php – hakre
你也可能想將該文件格式轉換成支持的東西,比如JSON或YAML。解析這些的庫已經存在(但JSON沒有評論)。 – hakre