Tienes un par de opciones, pero ninguno son "simple":
a) exec()
y utilizar el comando del sistema grep
, que pueden reportar los números de línea:
exec("grep -n 'your pattern here' file.txt", $output);`
b) sorber en el archivo usando file_get_contents()
, divídalo en una matriz de líneas, luego use preg_grep()
para encontrar las líneas correspondientes.
$dat = file_get_contents('file.txt');
$lines = explode($dat, "\n");
$matches = preg_grep('/your pattern here/', $lines);
c) Leer el archivo en trozos de tamaño de línea, mantener un recuento línea en funcionamiento, y hacer su ajuste de patrones en cada línea.
$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++;
}
Cada uno tiene sus altibajos
una) Usted está invocando un programa externo, y si su patrón contiene los datos suministrados por el usuario, que está potencialmente abrirse a la cáscara equivalente de un ataque de inyección SQL. En el lado positivo, no tienes que sorber todo el archivo y ahorrarás un poco en la sobrecarga de memoria.
b) Estás a salvo de los ataques de inyección de la cáscara, pero tienes que sorber todo el archivo. Si su archivo es grande, probablemente agote la memoria disponible.
c) Está invocando una expresión regular en cada línea, lo que tendría una sobrecarga considerable si se trata de una gran cantidad de líneas.
voy a tirar una conjetura y decir que es posible que no pueda usa 'preg_match_all' para esto. – drudge
preg_split y contar líneas en los resultados? Eso suena tonto ahora que lo dije. – scragz
No veo ninguna manera fácil de lograr lo que quieres hacer ... –