Php 从输入文件中筛选有用的数据
我有一个相当大而且非常混乱的数据文件,我希望从中过滤有用的数据。其结构如下所示:Php 从输入文件中筛选有用的数据,php,Php,我有一个相当大而且非常混乱的数据文件,我希望从中过滤有用的数据。其结构如下所示: !bla bla more bla some useless data something interesting something interesting something interesting some useless data something interesting something interesting some useless data bla bla 我的计划是使用file\u g
!bla bla
more bla
some useless data
something interesting
something interesting
something interesting
some useless data
something interesting
something interesting
some useless data
bla bla
我的计划是使用file\u get\u contents()
读取文件,然后使用str\u replace()
替换一些数据并将其用作标记。接下来,我尝试将无用的数据从文件的开头删除到marker1
,然后从marker2
删除到marker3
,然后从marker4
删除到文件的结尾,这样我只会在输出中获得有用的数据(此时我还不确定是否需要数据中的标记)。我尝试使用strstr()
,但无法正常工作
!bla bla
more bla
some useless data
==marker1==
something interesting
something interesting
something interesting
==marker2==
some useless data
==marker3==
something interesting
something interesting
==marker4==
some useless data
bla bla
我将使用explode()
将生成的有用数据传输到我的数据库
编辑:
我就这样解决了这个问题
preg_match('/(==marker1==)(.*?)(==marker2==)/s', $input, $marker1to2);
$marker1to2 = trim($marker1to2[2]);
$marker1to2 = preg_replace('/something /', '==marker1== something ', $marker1to2, 1);
echo $marker1to2;
您需要正则表达式:
$data = "!bla bla
more bla
some useless data
==marker1==
something interesting
something interesting
something interesting
==marker2==
some useless data
==marker3==
something interesting
something interesting
==marker4==
some useless data
bla bla";
preg_match("/(==marker1==)(.*)(==marker2==)/s", $data, $marker1to2);
$marker1to2 = trim($marker1to2[2]);
preg_match("/(==marker3==)(.*)(==marker4==)/s", $data, $marker3to4);
$marker3to4 = trim($marker3to4[2]);
echo "Marker 1 to 2:\n$marker1to2\n\n";
echo "Marker 3 to 4:\n$marker3to4\n\n";
输出:
Marker 1 to 2:
something interesting
something interesting
something interesting
Marker 3 to 4:
something interesting
something interesting
标记1至2:
有趣的事
有趣的事
有趣的事
标记3至4:
有趣的事
有趣的事
它适用于您的示例,但当我尝试将相同的原则应用于我的数据时,什么都没有发生。还有其他简单的方法吗?也许是strstr()的问题?我试着查找类似strstr的东西($data,$from_marker1,$to_marker2),但没有这样的运气你能发布一些真实的数据吗?我将用真实数据再次测试我的正则表达式。数据来自防火墙配置文件,我无法将其联机。您的标记真的被称为
==marker1=
?请在$marker1to2=…
之前添加var_dump($marker1to2)
,以查看是否有一些输出。这是var_dump()返回的结果:似乎正确,但我认为:|,但输出仍然带有我要删除的文本。数组(size=4)0=>string'标记内容1标记之间的文本2'(长度=105)1=>string'标记内容1'(长度=23)2=>string'标记之间的文本'(长度=35)3=>string'标记内容2'(长度=47)