Предположим, что файл test.txt
имеет следующее содержимое, а наша строка поиска имеет вид abc
:
abc
def
abc xyz
xyaabcdeejwgrf
Если вы хотите, чтобы результаты поиска были такими, как показано ниже, где abc
даже в качестве подстроки, это хорошо:
abc was found at line 1
abc was found at line 3
abc was found at line 4
тогда мы могли бы просто перебирать строку файла за строкой, сохраняя счетчик номера строки, и печатать результаты.
<?php
$file_handler = fopen("test.txt","r");
if($file_handler === false){
die("File doesn't exist!");
}
$search_str = "abc";
$line_no = 0;
while(!feof($file_handler)){
$line_no++;
$line = fgets($file_handler);
if(strpos($line,$search_str) !== false) echo "$search_str was found at ",$line_no,PHP_EOL;
}
fclose($file_handler);
Если вы хотите, чтобы результаты поиска были точным соответствиемabc
:
abc was found at line 1
abc was found at line 3
тогда мы могли бы сделать простое совпадение регулярных выражений с помощью границ слов \b
.
<?php
$file_handler = fopen("test.txt","r");
if($file_handler === false){
die("File doesn't exist!");
}
$search_str = "abc";
$line_no = 0;
while(!feof($file_handler)){
$line_no++;
$line = fgets($file_handler);
if(preg_match('/\b'.$search_str.'\b/', $line) == 1) echo "$search_str was found at line ",$line_no,PHP_EOL;
}
fclose($file_handler);
Вы также можете добавитьbreak
в цикле while, если вы хотите только первое вхождение.