Получить всю текстовую строку, которая начинается с шаблона поиска - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть файл .txt, полный строк, каждая из которых начинается с уникального идентификатора в квадратных скобках:

[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, которая начинается с идентификатора, который я ищу ($search_id), и получить только эту строку.Идентификаторы в квадратных скобках (за которыми следует пробел) всегда будут начинать строки.При извлечении строки я хочу лишить ее этого идентификатора, так как мне нужна только текстовая строка без идентификатора.

Мои вопросы:

  • Как мненаиболее эффективно выполнить поиск в этом файле? (всегда будет только один экземпляр идентификатора)
  • Как собрать строку, содержащую ключ поиска? И
  • как убрать начальные id-и-скобки, чтобы получить только текстовую строку?

Ответы [ 3 ]

2 голосов
/ 19 сентября 2019

Если файлы не очень большие, и поскольку вы уже читаете весь файл, вы можете использовать регулярное выражение:

$id = "07";
preg_match("/\[$id\] (.*)/", file_get_contents($file), $match);
echo $match[1];
  • Совпадение [$id], а затем пробел изатем сопоставьте все остальное и захватите его (.*)
0 голосов
/ 19 сентября 2019
$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 содержит вывод

0 голосов
/ 19 сентября 2019

Прежде всего, я предлагаю вам использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...