在php中读取带有特殊标签的php文件

时间:2011-04-27 03:46:52

标签: php file tags

我有一个文件,内容如下

<<row>> 1|test|20110404<</row>>
<<row>> 1|test|20110404<</row>>

<<row>><</row>>表示行的开头和结尾。我想读取此标记之间的行,并检查此标记是否存在。

3 个答案:

答案 0 :(得分:0)

您需要做的第一件事就是找到这个&#34;标签&#34;的位置。 strpos()函数就是这样做的。

$tag_pos=strpos('<> 1|test|20110404<> <> 1|test|20110404<>', '<>');
if ($tag_pos===false) {
    //The tag was not found!
} else {
    //$tag_pos equals the numeric position of the first character of your tag
}

如果这些是真正的线条,那么获得所有线条的有效方法就是分开<>

$lines=explode('<>', '<> 1|test|20110404<> <> 1|test|20110404<>');
$lines=array_filter($lines); //Removes blank strings from array

您可以通过向array_filter()调用添加回调函数来改进此问题,该调用使用trim()删除任何空格,然后查看它是否为空白。


编辑:好的,我看到你的&#34;标签&#34;从你的帖子中丢失了。由于您的开始和结束标记不匹配,上面的代码对您没用。让我再试一次......

function strbetweenstrs($source, $tag1, $tag2, $casesensitive=true) {
    $whatsleft=$source;
    while ($whatsleft<>'') {
        if ($casesensitive) {
            $pos1=strpos($whatsleft, $str1);
            $pos2=strpos($whatsleft, $str2, $pos1+strlen($str1));
        } else {
            $pos1=strpos(strtoupper($whatsleft), strtoupper($str1));
            $pos2=strpos(strtoupper($whatsleft), strtoupper($str2), $pos1+strlen($str1));
        }
        if (($pos1===false) || ($pos2===false)) {
            break;
        }
        array_push($results, substr($whatsleft, $pos1+strlen($str1), $pos2-($pos1_strlen($str1))));
        $whatsleft=substr($whatsleft, $pos2+strlen($str2));
    }
}

请注意,我还没有对此进行过测试......但是你会得到一般的想法。这可能是一种更有效的方法。

答案 1 :(得分:0)

创建自己的格式并不是那么难,但创建一个脚本来阅读它可能很困难。 使用标准化格式的优点是大多数编程语言已经支持它们。例如:

XML:您可以使用simplexml_load_string()功能,它可以让您轻松浏览内容。

$str = "<?xml version="1.0" encoding="utf-8"?>
<data>
   <row>1|test|20110404</row>
   <row>1|test|20110404</row>
</data>";
$xml = simplexml_load_string($str);

现在您可以访问您的数据

echo $xml->row[0];
echo $xml->row[1];

我相信你明白了, 使用jsondecode()函数对JSON(Javascript Object Notation)也有很好的支持; 在php.net上查看更多详细信息

答案 2 :(得分:0)

我建议使用preg_match: -

 preg_match( '#<< row>>(.*)<< /row>>#', $line, $matches);

 if( ! empty($matches))
 {
  // line was found
  print_r( $matches[1] ); // will contain the content between the start and end row tags
 }