PHP preg_match (.*) nicht passenden Vergangenheit Zeilenumbrüche
Habe ich diese Daten in einem LONGTEXT-Spalte (also die Zeilenumbrüche werden beibehalten):
Paragraph one
Paragraph two
Paragraph three
Paragraph four
Ich versuche zu entsprechen Absatz 1 bis 3. Ich bin mit diesem code:
preg_match('/Para(.*)three/', $row['file'], $m);
Diese nichts zurückgibt. Wenn ich versuche zu arbeiten, nur innerhalb der ersten Zeile des Absatzes, durch matching:
preg_match('/Para(.*)one/', $row['file'], $m);
Dann der code funktioniert und bekomme ich die richtige Zeichenfolge zurückgegeben. Was mache ich hier falsch?
InformationsquelleAutor Norse | 2012-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
s
modifier.http://php.net/manual/en/reference.pcre.pattern.modifiers.php
/s
modifier ist gierig. Wenn es mehr als eine 'drei' im text, die match enthalten alle text bis zum letzten vorkommen. verwenden/sU
um dies zu verhindern (man beachte die Großbuchstaben U).nicht wirklich ein Modifikator Problem: die
*
Wiederholung ist gierig per se. Ein besserer Ansatz ist, um ein Fragezeichen zu machen, faul:/Para(.*?)three/s
. Auch die/U
modifier nicht Abbrechen greedyness, aber es umkehren:*
wird faul und*?
wird gierig. Ist nicht ein problem auf den OP-code, aber es auslösen kann komische Fehler in einem komplexeren regulären Ausdruck.InformationsquelleAutor Tasso Evangelista
Fügen Sie die multi-line-Modifikator.
ZB:
s
Modifikator), dies
modifier macht.
match newlines sowie alle anderen Zeichen (standardmäßig nicht enthalten), in der Erwägung, dassm
steuert, wie^
und$
übereinstimmen; Sie zu zwingen, nur die start und Ende der gesamten Zeichenkette (fast - siehe auchD
) im Gegensatz zu den start-und Ende jeder Zeile.InformationsquelleAutor temporalslide
Versuchen Sie die regex-Punkt-(die extra 's' - parameter am Ende), so gehören auch Zeilenumbrüche:
s-Modifikator für den Sieg
InformationsquelleAutor guiniveretoo
Wenn Sie nicht wie
/
am start-und, und, verwenden T-RegxInformationsquelleAutor Danon