Domanda

E 'possibile avere un'espressione regolare che è alla ricerca di una stringa come '\ bfunction \ b' che visualizzerà il numero di linea dove ha trovato la partita?

È stato utile?

Soluzione

I suggerirà qualcosa che lavoro potrebbe per voi,

// 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
}

Altri suggerimenti

Non c'è modo semplice per farlo, ma se si volesse, si potrebbe catturare l'offset match (utilizzando il flag PREG_OFFSET_CAPTURE per preg_match o preg_match_all ) e quindi determinare quale linea che la posizione è nella stringa per il conteggio di quanti a capo (per esempio) si verificano prima di quel punto.

Ad esempio:

$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.

A seconda di ciò che costituisce una "linea" nella vostra applicazione, si potrebbe alternativamente voler cercare \r\n o <br> (ma che sarebbe un po 'più complicato, perché si avrebbe dovuto utilizzare un altro regex per conto di <br /> o <br style="...">, ecc.).

Per quanto ne so che non è, ma se siete su Linux o qualche altro Unix-like sistema, grep lo farà e può usare (quasi) la stessa sintassi delle espressioni regolari come la famiglia preg_ di funzioni con l'-P bandiera.

No. È possibile passare il flag PREG_OFFSET_CAPTURE a preg_match, strega vi dirà l'offset in byte. Tuttavia, non v'è alcun modo semplice per convertire questo per un numero di riga.

Non si tratta di espressioni regolari, ma funziona:

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

Opps! Questo non è js!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top