我有一个文件,内容如下
<<row>> 1|test|20110404<</row>>
<<row>> 1|test|20110404<</row>>
<<row>><</row>>
表示行的开头和结尾。我想读取此标记之间的行,并检查此标记是否存在。
答案 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
}