Ich habe diese Daten in einer Spalte LONG (so die Zeilenumbrüche bleiben erhalten):PHP preg_match nicht vorbei Linie passend bricht
Paragraph one
Paragraph two
Paragraph three
Paragraph four
Ich versuche, Absatz 1 bis 3 I entsprechen verwende diesen Code:
preg_match('/Para(.*)three/', $row['file'], $m);
Dies gibt nichts zurück. Wenn ich versuche, nur innerhalb der ersten Zeile des Absatzes zu arbeiten, durch Anpassung:
preg_match('/Para(.*)one/', $row['file'], $m);
Dann funktioniert der Code und ich bekomme die richtige Zeichenfolge zurückgegeben. Was mache ich hier falsch?
Warnung: Der '/ s' Modifikator ist gierig. Wenn es mehr als eine "drei" im Text gibt, wird die Übereinstimmung den gesamten Text bis zum letzten Vorkommen enthalten. Verwenden Sie '/ sU', um dies zu verhindern (beachten Sie das Großbuchstabe U). –
@FrankForte nicht wirklich ein Modifikator Problem: die '*' Wiederholung ist per se gierig. Ein besserer Ansatz ist es, ein Fragezeichen zu setzen, um es faul zu machen: '/ Para (. *?) Three/s'. Der '/ U'-Modifier hebt Greedy nicht auf, sondern invertiert ihn: '*' wird faul und '*?' Wird gierig. Es ist kein Problem mit OP-Code, aber es kann seltsame Fehler in einem komplexeren regulären Ausdruck auslösen. –