¿Es posible mostrar los números de línea cuando se utiliza una expresión regular en PHP?

StackOverflow https://stackoverflow.com/questions/3560640

  •  01-10-2019
  •  | 
  •  

Pregunta

¿Es posible tener una expresión regular que está en busca de una cadena como '\ bfunction \ b' que mostrará el número de línea donde se encuentra la coincidencia?

¿Fue útil?

Solución

Me sugerirá algo que la fuerza de trabajo para usted,

// Get a file into an array.  In this example we'll go through HTTP to get
// the HTML source of a URL.
$lines = file('http://www.example.com/');

// Loop through our array, show HTML source as HTML source; and line numbers too.
foreach ($lines as $line_num => $line) {
    // do the regular expression or sub string search here
}

Otros consejos

No hay forma sencilla de hacerlo, pero si quisiera, podría capturar el desplazamiento partido (usando la bandera PREG_OFFSET_CAPTURE para preg_match o preg_match_all ) y luego determinar qué línea que la ubicación es en la cadena mediante recuento de cuántos saltos de línea (por ejemplo) se producen antes de ese punto.

Por ejemplo:

$matches = array();
preg_match('/\bfunction\b/', $string, $matches, PREG_OFFSET_CAPTURE);
list($capture, $offset) = $matches[0];
$line_number = substr_count(substr($string, 0, $offset), "\n") + 1; // 1st line would have 0 \n's, etc.

En función de lo que constituye una "línea" en su aplicación, es posible alternativamente que desee buscar \r\n o <br> (pero eso sería un poco más complejo, ya que tendría que utilizar otra expresión regular para dar cuenta de <br /> o <br style="...">, etc.).

Por lo que yo sé que no es, pero si estás en Linux o algún otro tipo Unix sistema, grep hará eso y se puede utilizar (casi) la misma sintaxis de expresiones regulares como la familia preg_ de funciones con el -P bandera.

No. Puede pasar el indicador PREG_OFFSET_CAPTURE a preg_match, bruja le dirá el desplazamiento en bytes. Sin embargo, no hay una manera fácil de convertir a un número de línea.

Esto no es expresión regular, pero las obras:

$offset = strpos($code, 'function');
$lines = explode("\n", substr($code, 0, $offset));
$the_line = count($lines);

Opps! Esto no es js!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top