我有一个奇怪的问题preg_replace
。它似乎对单个字符串表现正常,但是当我带来一个大文本文件(~1.5MB)时,它似乎什么也不做。
我正在尝试解析具有这种结构的键值的大型文本文件:
"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
电话都不会做任何事情(或者我的正则表达式已关闭)。
一个明显的解决方案是忽略解析中的注释,但我认为我在这里必须缺少一些东西,为什么这不起作用。如果可能的话,我真的很想在不更改解析器的情况下解决这个问题。有任何想法吗?