ho questi dati in una colonna LONGTEXT (in modo che le interruzioni di riga sono trattenuti):PHP preg_match non corrispondenti linea passato rompe
Paragraph one
Paragraph two
Paragraph three
Paragraph four
Sto cercando di abbinare paragrafo 1 a 3. I sto usando questo codice:
preg_match('/Para(.*)three/', $row['file'], $m);
Questo non restituisce nulla. Se provo a lavorare solo all'interno della prima riga del paragrafo, abbinando:
preg_match('/Para(.*)one/', $row['file'], $m);
Poi il codice funziona e ottengo la stringa corretta restituita. Cosa sto facendo di sbagliato qui?
Attenzione: il modificatore '/ s' è avido. Se c'è più di un 'tre' nel testo, la corrispondenza includerà tutto il testo fino all'ultima occorrenza. usa '/ sU' per impedirlo (nota la lettera maiuscola U). –
@FrankForte in realtà non è un problema di modifica: la ripetizione '*' è avida di per sé. Un approccio migliore consiste nel mettere un punto interrogativo per renderlo pigro: '/ Para (. *?) Three/s'. Inoltre, il modificatore '/ U' non cancella l'avidità, ma la inverte:' * 'diventa pigro e' *? 'Diventa avido. Non è un problema sul codice OP, ma può causare strani errori in un'espressione regolare più complessa. –