kostenloser Webspace werbefrei: lima-city


Regex Problem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tobiworlds

    Kostenloser Webspace von tobiworlds

    tobiworlds hat kostenlosen Webspace.

    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
    +++Test+++
    und so wieder aufhört
    ---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 :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Benutz doch einfach explode ().

    $teile = explode ('+++Test+++', $text);
    $mail = explode ('---Test---', $teile[1]);
    $mail[0] enthält dann den Text zwischen den Trennern.
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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
    $matches[1]
    stehen die "Subjects" und in
    $matches[2]
    die "Texts"
  5. thomasba

    Co-Admin Kostenloser Webspace von thomasba

    thomasba hat kostenlosen Webspace.

    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:
    s
    – Mit einem Punkt auch auf Zeilenumbrüche matchen
    U
    – Ungreedy

    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
  6. Autor dieses Themas

    tobiworlds

    Kostenloser Webspace von tobiworlds

    tobiworlds hat kostenlosen Webspace.

    Vielen Dank, funktioniert :biggrin:
    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
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    tobiworlds schrieb:
    Die Vorlagen schreibe ich jetzt alle in eine Datei [...]
    Warum schreibst du das in eine Datei und nicht in eine Datenbank?

    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...
  8. Autor dieses Themas

    tobiworlds

    Kostenloser Webspace von tobiworlds

    tobiworlds hat kostenlosen Webspace.

    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.
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    tobiworlds schrieb:
    Weil ich in der Datenbank Probleme hatte mit den Zeilenumbrüchen und nicht weiß, wie man dass beheben könnte.
    Wenn du die Eingaben richtig escapst hast du kein Problem (
    mysql_real_escape_string()
    übernimmt diese Aufgabe) ;-)

    tobiworlds schrieb:
    Außerdem kann ich sie so leichter bearbeiten.
    Dafür kannst du bei der Datenbankversion ein nettes Webinterface schreiben...

    Aber es ist natürlich deine Entscheidung was du verwenden möchtest.
  10. Autor dieses Themas

    tobiworlds

    Kostenloser Webspace von tobiworlds

    tobiworlds hat kostenlosen Webspace.

    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...
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!