У вас есть пара вариантов, но ни один "простые":
а) exec()
и использовать команду системы grep
, которая может сообщить номера строк:
exec("grep -n 'your pattern here' file.txt", $output);`
б) Slurp в файле с помощью file_get_contents()
, разделите его на массив строк, затем используйте preg_grep()
, чтобы найти соответствующие строки.
$dat = file_get_contents('file.txt');
$lines = explode($dat, "\n");
$matches = preg_grep('/your pattern here/', $lines);
с) Прочитайте файл в линии размера кусков, держать счет бегущей строки, и сделать свой матч шаблон на каждой строке.
$fh = fopen('file.txt', 'rb');
$line = 1;
while ($line = fgets($fh)) {
if (preg_match('/your pattern here/', $line)) {
... whatever you need to do with matching lines ...
}
$line++;
}
Каждый из них имеет свои взлеты и падения
а) вы вызываете внешнюю программу, и если ваш шаблон содержит все введенные пользователем данные, вы потенциально открываете себя до эквивалента раковины атака SQL-инъекций. С положительной стороны, вам не нужно прерывать весь файл и немного сэкономить на издержках памяти.
b) Вы можете быть в безопасности от атак оболочки, но вам нужно прорваться во весь файл. Если ваш файл большой, вы, вероятно, исчерпаете доступную память.
c) Вы вызываете регулярное выражение для каждой строки, что имеет значительные накладные расходы, если вы имеете дело с большим количеством строк.
Я собираюсь выбросить догадку и сказать, что вы не можете быть в состоянии для этого используйте 'preg_match_all'. – drudge
preg_split и подсчет строк в результатах? Теперь это звучит глупо, что я это сказал. – scragz
Я не вижу никакого простого способа выполнить то, что вы хотите сделать ... –