我遇到一个奇怪的问题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