如何在PHP中解析文件

时间:2010-12-26 16:10:24

标签: php parsing file

我有一个包含以下内容的字符串

 [text1] some content [text2] some
 content some content [text3] some
 content

“[textn]”是有限的,也有特定的名称。我想将内容放入数组中。有什么想法吗?

4 个答案:

答案 0 :(得分:3)

如果你不想使用正则表达式,那么strtok()可以在这里做到这一点:

strtok($txt, "[");      // search for first [

while ($id = strtok("]")) {   // alternate ] and [
    $result[$id] = strtok("[");   // add token
}

答案 1 :(得分:1)

preg_match或preg_match_all,如果你想要正则表达式,你需要给我们一个例子。

$string = "[text1] some content [text2] some content some content [text3] some content";

preg_match_all("#\[([^\[\]]+)\]#is", $string, $matches);

print_r($matches); //Array ( [0] => Array ( [0] => [text1] [1] => [text2] [2] => [text3] ) [1] => Array ( [0] => text1 [1] => text2 [2] => text3 ) ) 

非递归的。

答案 2 :(得分:1)

在php中有一个用regexp分隔符分割字符串的功能,比如preg_match,preg_match_all,查找它们。

如果你有一个单词列表,你可以像这样分割字符串(显然,可以写得更好):

$words = array('[text1]','[text2]','[text3]');
$str = "[text1] some content [text2] some content some content [text3] some content3";

for ($i=0; $i<sizeof($words) ; $i++) { 
  $olddel = $del;
  $del = $words[$i];
  list($match,$str) = explode($del,$str);
  if ($i-1 >= 0) {  $matches[$i-1] = $olddel.' '.$match; }
}
$matches[] =$del." ".$str;

print_r($matches);

这将输出:Array ( [0] => [text1] some content [1] => [text2] some content some content [2] => [text3] some content3 )

答案 3 :(得分:0)

是[和]字符串的一部分还是只是用它们突出显示要提取的部分?如果不是,那么你可以使用

if (preg_match_all("/\b(text1|text2|text3|foo|bar)\b/i", $string, $matches)) {
   print_r($matches);
}