Regex Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anspruch
code
dank
datei
datenbank
durchsuchen
inhalt
leichter bearbeiten
manual
match
parameter
problem
richtigen format
statement
teil
test
text
url
verwenden
vorlage
-
Hey Leute,
ich habe ein Problem mit preg_match.
Ich habe eine Datei erstellt, in der ich Email-Texte speichere:
+++Test+++ ###Subject### Hallo! ###Text### Dies ist ein Test! ---Test--- +++Test2+++ ...
Jetzt möchte ich immer nur den Teil rausziehen, der so anfängt
und so wieder aufhört+++Test+++
.---Test---
Mein Problem ist die dafür passende Regular Expression.
Ich habe diese getestet:
.\+\+\+Test\+\+\+\n###Subject###\n(.*)\n###Text###\n(.*)\n---Test---
Die funktioniert aber nicht. So gibt es kein match.
Kann mir jemand helfen, eine passende zu schreiben? Danke :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Benutz doch einfach explode ().
$teile = explode ('+++Test+++', $text);
$mail = explode ('---Test---', $teile[1]);
$mail[0] enthält dann den Text zwischen den Trennern. -
Nimm diesen Code, der erledigt dir das:
$mail = <<< 'EOF' +++Test+++ ###Subject### Hallo! ###Text### Dies ist ein Test! ---Test--- +++Test2+++ ###Subject### Neuer Text ###Text### mit neuem mehrzeiligem Inhalt ---Test2--- ... EOF; // es müssen unbedingt \n als Zeilenende sein // später musst $mail = str_replace("\r\n", "\n", $mail); $pattern = '|\+\+\+([a-zA-Z0-9].*)\+\+\+\n' . '\#\#\#Subject\#\#\#\n' . '(.*)\n' . '\#\#\#Text\#\#\#\n' . '(.*)\n' . '---\1---|isU'; echo($pattern); preg_match_all($pattern, $mail, $matches); print_r($matches);
In
stehen die "Subjects" und in$matches[1]
die "Texts"$matches[2]
-
Ein
matcht normalerweise nicht auf einen Zeilenumbruch, mit dem richitgen Modifikator kannst du das aber Einstellen..
PHP: Mögliche Modifikatoren in RegEx-Suchmustern - Manual
In deinem Fall wären das:
– Mit einem Punkt auch auf Zeilenumbrüche matchens
– UngreedyU
somit kannst du einfach folgenden RegEx verwenden:
preg_match("/\+\+\+Test\+\+\+\r?\n###Subject###\r?\n(.*)###Text###\r?\n(.*)---Test---/Us",$text,$m);
Beitrag zuletzt geändert: 14.6.2012 20:38:43 von thomasba -
Vielen Dank, funktioniert
Aber ich finde die Lösung von chatter komfortabler, weil dann die Rückgaben sinnvoller zugeordnet werden können.
Ich brauche eine Funktion, die mir abhängig von dem übergebenen Parameter den entsprechenden Betreff und Inhalt in die Mail schreibt. Die Vorlagen schreibe ich jetzt alle in eine Datei, unterteilt in die verschiedenen Abschnitte und teile sie dann mit chatters Lösung wieder auf. Danach zerlege ich weiter und weise beides Variablen zu...
Nochmals vielen Dank,
TobiWorldsDE
Edit:
Danke auch an thomasba, aber ich werde jetzt diese kombinierte Lösung wie eben beschrieben verwenden.
Beitrag zuletzt geändert: 14.6.2012 20:44:47 von tobiworlds -
tobiworlds schrieb:
Warum schreibst du das in eine Datei und nicht in eine Datenbank?
Die Vorlagen schreibe ich jetzt alle in eine Datei [...]
Bei einer Datenbank könntest du mit einem einzigen SELECT-Statement deine Daten sofort im richtigen Format abholen und du müsstest nicht jedes Mal die gesamte Datei lesen und parsen und durchsuchen, was bei einer großen Datei auch Zeit in Anspruch nimmt... -
Weil ich in der Datenbank Probleme hatte mit den Zeilenumbrüchen und nicht weiß, wie man dass beheben könnte.
Außerdem kann ich sie so leichter bearbeiten. -
tobiworlds schrieb:
Wenn du die Eingaben richtig escapst hast du kein Problem (
Weil ich in der Datenbank Probleme hatte mit den Zeilenumbrüchen und nicht weiß, wie man dass beheben könnte.
übernimmt diese Aufgabe)mysql_real_escape_string()
tobiworlds schrieb:
Dafür kannst du bei der Datenbankversion ein nettes Webinterface schreiben...
Außerdem kann ich sie so leichter bearbeiten.
Aber es ist natürlich deine Entscheidung was du verwenden möchtest. -
Das Webinterface ist auf jeden Fall eine gute Idee, aber im Moment habe ich eben erst mal nur phpmyadmin zur Verfügung.
Und wenn ich dort bearbeite, bringt mir auch mysql_real_escape_string() nichts... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage