我有一个充满行的.txt文件,每个文件都以方括号括起来的唯一ID开头:
[13] Text text text text text text text
[23] Text text text text text text text
[65] Text text text text text text text
[07] Text text text text text text text
[66] Text text text text text text text
使用php打开并检索文本文件内容:
$file = 'path_to_file/file.txt';
$handle = fopen($file, "r");
$content = fread($handle, filesize($file));
fclose($handle);
$search_id = '[65]';
我现在希望在$content
中找到以我要搜索的ID($search_id
)开头的单独一行,并仅检索该行。方括号中的ID(后跟空格)将始终启动行。检索该行时,我希望将其删除此id,因为我只需要没有id的文本行。
我的问题是:
答案 0 :(得分:2)
如果文件不是很大,并且由于您已经在读取整个文件,则可以使用正则表达式:
$id = "07";
preg_match("/\[$id\] (.*)/", file_get_contents($file), $match);
echo $match[1];
[$id]
,然后再匹配空格,然后匹配其他所有内容并捕获(.*)
答案 1 :(得分:0)
首先,建议您使用file
来获取包含文件行的数组:
$file = 'path_to_file/file.txt';
$search_id = '[65]';
$lines = file($file);
$text = $textWithSearchId = '';
foreach($lines as $line)
{
if(strpos(trim($line), $search_id) === 0)
{
$text = trim(substr($line, strlen($search_id)));
$textWithSearchId = $line;
}
}
echo "$text<br />$textWithSearchId";
这是一个有效的测试:
$lines = array();
$lines[] = "[13] Text 13 text text text text text text";
$lines[] = "[23] Text 23 text text text text text text";
$lines[] = "[65] Text 65 text text text text text text";
$lines[] = "[07] Text 07 text text text text text text";
$lines[] = "[66] Text 66 text text text text text text";
$search_id = '[65]';
$text = $textWithSearchId = '';
foreach($lines as $line)
{
if(strpos(trim($line), $search_id) === 0)
{
$text = trim(substr($line, strlen($search_id)));
$textWithSearchId = $line;
}
}
echo "$text<br />$textWithSearchId";
输出:
Text 65 text text text text text text
[65] Text 65 text text text text text text
答案 2 :(得分:-1)
$file = 'path_to_file/file.txt';
$handle = fopen($file, "r");
$content = fread($handle, filesize($file));
fclose($handle);
$arr = explode(PHP_EOL, $content);
$search_id = '[65]';
foreach ($arr as $value) {
$result = substr($value, 0, 4);
if($result === $search_id)
{
$string = str_replace($search_id,'', $value);
print_r($string);
return;
}
}
变量$ string包含输出