2011-11-20 55 views
1

我有这个在很多文件的顶部:如何在PHP中阅读此方法?

--- 
title: This is a link 
type: link 
--- 

什么是读取每个那些,扔变量的最佳方式?

我可以使用正则表达式捕获该片段:/^(\-{3})(.*)(\-{3})/s然后再次使用正则表达式来读取每个变量。

有没有更好的方法?有没有办法将该正则表达式限制为只有三行,以防万一我在文档后面的某个位置有---

+0

可能有一个稍微快一点的方法,但我们并没有谈论超过微秒的事情。它会做得很好。如果这些文件超大,那么您可以使用strpos()将第一部分分块。 –

回答

0

应该这样做:

<?php 

$file = file("/path/to/the/file"); 

$titleLine = explode(": ",$file[1]); 
$typeLine = explode(": ",$file[2]); 

$title = $titleLine[1]; 
$type = $typeLine[1]; 

echo "$title: $type"; 

?> 

它从文件中读取仅行2和3。

+0

如果我正确读取文档,则会将文档的全部内容读入数组,并且如果文件很大,可能不是最佳选择。见http://php.net/manual/en/function.file.php – hafichuk

+0

我修改了这一点,以适应我的需要,但没关系。谢谢! – switz

0

这工作:

 
$file = file("/file/path"); 
echo $title = array_pop(explode(": ",$file[1])); 
echo $type = array_pop(explode(": ",$file[2])); 
1

最好的办法是不使用/s,并明确^换行符$主播工作。如果你只有这两个变量,就像在你的榜样,你的确可以用一个正则表达式做到这一点:

preg_match_all(
     '/ 
     ^---   $ \s* 
     ^(\w+) : (.*) $ \s* 
     ^(\w+) : (.*) $ 
     /mix', 
     $text, $result, PREG_SET_ORDER); 

这会给你的变量名每个在[1]和[3]和相关联的值在[2]和[4]中。