Regex - Suchmuster ist ein String, der allerdings über mehrere Zeilen gehen kann

Zarathustra

Grünschnabel
Hallo,

Die SuFu ergab leider nix oder ich bin zu dumm sie zu benutzen. Mein Problem ist, dass ich als Suchmuster einen String ($string) nutze. Im Text ($volltext) kann er aber an belieber Stelle einen Zeilenumbruch enthalten.

PHP:
$suche = '/'.trim($string).'/i';
preg_match($suche, $volltext, $treffer);

klappt leider nicht. Auch /m hat nicht geklappt. Gibt es eine Möglichkeit, dass preg_match den Zeilenumbruch in $volltext ignoriert ?

Vielen Dank
 
Hi
Danke für die Ideen! Leider aber noch keine Lösung.

@Napofis
/s klappt nicht. Soweit ich weiß betrifft das auch nur den ".", der bei meinem Suchmuster nicht vorkommt. Es geht hier vielmehr um ein Suchmuster wie "/Horst ging in den Wald und sah einen Wolf/i". Im Volltext steht aber:

Horst ging in den
Wald und sah einen Wolf.

@Tim Bureck
Das ist die abolute Notlösung. Es handelt sich um einen längeren Text, der ohne Zeilenumbrüche nachher wie einen Klotz aussieht. Zeilenumbrüche müssen auf jeden Fall am Ende wieder im Text sein. Evtl. gibt es ein Zeichen, dass ich als Platzhalter einfügen kann und was von RegEx ignoriert wird. Kennt ihr eins?

Vielen Dank
 
Hi
Danke für die Ideen! Leider aber noch keine Lösung.

@Napofis
/s klappt nicht. Soweit ich weiß betrifft das auch nur den ".", der bei meinem Suchmuster nicht vorkommt. Es geht hier vielmehr um ein Suchmuster wie "/Horst ging in den Wald und sah einen Wolf/i". Im Volltext steht aber:

Horst ging in den
Wald und sah einen Wolf.
Vielen Dank
Ich denke auch eher das er die m-Flag meint...

Gruß
 
Habe das Problem anders gelöst. Lasse den String mit explode in ein Array mit einzelnen Wörtern zerlegen. Danach erstelle ich in einer Schleife folgendes Suchmuster

/Wort1 ?(..)? ?Wort2 ?(..)? ?Wort3 ?(..)? ?Wort4 ?(..)? ?Wort5/is

Damit kann der Zeilenumbruch vor oder nach einem Leerzeichen kommen. Leider kriege ich es nicht hin anstatt "(..)?" "(\n)?" zu benutzen. Habt ihr da evtl. eine Idee? Meine Lösung hat den nachteil, dass ein 2-stelliges Wort mit dazwischen funken könnte und der falsche String gemacht wird...

Edit:
((\r\n)+)? funktioniert anstelle von (..)? wunderbar.
 
Zuletzt bearbeitet:
Zurück