Ergebnis 1 bis 14 von 14

Thema: Problem mit preg_match_all

  1. #1
    Benutzer
    Registriert seit
    25.02.2009
    Beiträge
    54
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Problem mit preg_match_all

    Hallo,

    ich habe ein Problem mit "preg_match_all". Ich weiß, dass das eine PHP-Funktion ist und nichts direkt mit dem ZF zu tun hat. Aber vielleicht könnt ihr mir trotzdem kurz helfen.

    Ich habe in einem Text mehrmals Textpassagen wie diese:
    Code:
    myl+='1111\t2222\t3333\t4444\t5555\t6666\r\n';
    diese möchte ich mit preg_match_all entsprechen finden und alle einzelnen Zahlen (1111, 2222, 3333, etc) als Array zurückbekommen. Soweit kein Problem, nur der Pattern macht mir Kopfzerbrechen, ich bekomm den einfach nicht aufgebaut.

    Hier ein kurzer Codeschnipsel:
    Code:
                
    $text="myl+='1111\t2222\t3333\t4444\t5555\t6666\r\n';myl+='1111\t2222\t3333\t4444\t5555\t6666\r\n';";
    $pattern = "/myl\+='([^\"]*)\\t([^\"]*)\\t([^\"]*)\\t([^\"]*)\\t([^\"]*)\\t([^\"]*)\\r\\n';/siU";
    //$pattern = "/myl\+='([^\"]*)';/siU"; // -> geht, aber trennt die zahlen nicht!
    preg_match_all($pattern, $text, $arrayRegex);
    Zend_Debug::Dump($arrayRegex);
    wäre super wenn ihr mir da nen tipp hattet! danke!
    Mein aktuelles Projekt:
    www.meine-finanzfragen.de -
    Wir haben die Antworten und Rechner rund um Ihre Finanz-Fragen.

  2. Aktuelles Zend Framework Stellenangebot


    Webprogrammierer(in)
    von ZAPITANO GmbH

    Details ansehen
  3. #2
    Erfahrener Benutzer Avatar von bate
    Registriert seit
    17.04.2007
    Beiträge
    204
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Code:
    $text="myl+='1111\t2222\t3333\t4444\t5555\t6666\r\n';myl+='1111\t2222\t3333\t4444\t5555\t6666\r\n';";
    preg_match_all('/[0-9]+/si', $text, $match);
    print_r($match);
    isses das?

  4. #3
    Benutzer
    Registriert seit
    25.02.2009
    Beiträge
    54
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    nicht wirklich, das filtert alle zahlen raus.
    es kann sein dass im text noch andere zahlen irgendwo stehen, die sind uninteressant.
    es soll aber auch nach "/t" getrennt werden.
    also:
    Code:
    [1] => 1111 (erste fundstelle)
              1111 (zweite fundstelle)
    [2] => 2222 (erste)
              2222 (zweite)
    [3] => 3333
    ... usw.
    hier nochmal der aufbau mit platzhaltern "???"
    Code:
    myl+='???\t???\t???\t???\t???\t???\r\n';
    Mein aktuelles Projekt:
    www.meine-finanzfragen.de -
    Wir haben die Antworten und Rechner rund um Ihre Finanz-Fragen.

  5. #4
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Also irgendwie sieht das schon sehr wirr aus ^^ Woher kommt denn der String?
    PHP-Code:
    $a explode("\t",substr($string,6,-6)); 

  6. #5
    Benutzer
    Registriert seit
    25.02.2009
    Beiträge
    54
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    das ist eine externe HTML-Datei (Export aus einem anderen Programm) die verarbeitet werden soll. Dh. es muss erst mal die struktur (myl...) gefunden werden und dann die teile zerlegt werden. mit explode ginge es wenn ich es gefunden habe mit preg_match_all, aber warum zwei schritte wenn es in einem ginge, hab ich mir gedacht, darum die fragen nach preg_match_all.
    Mein aktuelles Projekt:
    www.meine-finanzfragen.de -
    Wir haben die Antworten und Rechner rund um Ihre Finanz-Fragen.

  7. #6
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    das ist eine externe HTML-Datei (Export aus einem anderen Programm) die verarbeitet werden soll.
    Ich glaub, ich verstehs nicht, denn: Das ist kein HTML Oo
    Und kannst du den Leuten nicht mal sagen, die solln ein sinnvolles Format wählen
    mit explode ginge es wenn ich es gefunden habe mit preg_match_all, aber warum zwei schritte wenn es in einem ginge, hab ich mir gedacht, darum die fragen nach preg_match_all.
    zB weil du so auch einfach per strpos() nach "myl" suchen kannst
    Reguläre Ausdrücke können sehr teuer werden, deshalb sollte man sie auch nicht als heiligen Gral ansehen. Und letzten Endes: Meins funktioniert Du kannst es hinterher, falls dir die Lösung einfällt, immer noch per preg_match() (glaub, preg_match_all() ist nichtmal nötig) umsetzen.

    Vllt fällt mir gleich auch nochwas ein, also haltet euch bereit

  8. #7
    Benutzer
    Registriert seit
    25.02.2009
    Beiträge
    54
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    stimmt, das ist kein reines HTML. In der besagten HTML-Datei ist ein Javascript-Part drin und um den geht es. Aber das ist eigentlich nur nebensächlich, denn es einfach um den string! leider hab ich keinen direkten einfluss auf die dateien (externer Partner).

    habe bereits mit anderen strings und preg_match gute erfahrungen gemacht und fand es sehr praktisch, da es bereits als array zurückgegeben wird.
    das problem bei dem sehe ich darin, dass "\t" auch als regex gedeutet wird. aber wie bringt man regex bei, das als simplen string zu suchen??

    ich halte mich bereit für deine lösung...
    Mein aktuelles Projekt:
    www.meine-finanzfragen.de -
    Wir haben die Antworten und Rechner rund um Ihre Finanz-Fragen.

  9. #8
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    das problem bei dem sehe ich darin, dass "\t" auch als regex gedeutet wird. aber wie bringt man regex bei, das als simplen string zu suchen??
    Eigentlich genau falsch rum, denn "\t" wird eben nicht als Regex, sondern als Tabulator gedeutet. Damit das Steuerzeichen auch als Solches (bei PCRE) ankommt, muss man (für PHP) den Backslash escapen.
    Code:
    \\t
    Das sieht besonders witzig beim Backslash selbst aus
    Code:
    \\\\



    Code:
    ~myl='((.+)\\t)*(.+)\\r\\n';~si
    Das könnte hinhaun, liefert aber mehr, als du eigentlich willst. mE gabs eine Möglichkeit, dass man zu Klammern "()" sagen konnte, dass sie eben nicht mit genommen werden, aber finds grad nicht wieder.

    edit: Habs wieder gefunden
    http://www.php.net/manual/en/regexp....ubpatterns.php
    Code:
    ~myl='(?:(.+)\\t)*(.+)\\r\\n';~si
    Geändert von KingCrunch (30.01.2010 um 20:54 Uhr)

  10. #9
    Benutzer
    Registriert seit
    25.02.2009
    Beiträge
    54
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    hab gerade mal auf http://www.regex-tester.de/regex.html mal rungespielt.
    mit der regex:
    Code:
    myl\+='([^\\]*)\\t([^\\]*)\\t([^\\]*)\\t([^\\]*)\\t([^\\]*)\\t([^\\]*)\\r\\n';
    ging es auf der Seite, aber in PHP eingefügt, geht es nicht, da kommt ein leerer Array raus, obwohl ich beide male die gleichen input-strings angegeben habe.

    Zitat Zitat von KingCrunch Beitrag anzeigen
    edit: Habs wieder gefunden
    http://www.php.net/manual/en/regexp....ubpatterns.php
    Code:
    ~myl='(?:(.+)\\t)*(.+)\\r\\n';~si
    hat leider auch nicht funktioniert, ist auch leer das ergebnis.
    Mein aktuelles Projekt:
    www.meine-finanzfragen.de -
    Wir haben die Antworten und Rechner rund um Ihre Finanz-Fragen.

  11. #10
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    jep, i know, aber mich irritierts dann doch ...

    Code:
    ~myl\+=\'(?:([^\\t]+)\\t)*(.+)\\r\\n';~
    Damit krieg ich wenigstens schon die ersten Beiden ...

  12. #11
    Benutzer
    Registriert seit
    25.02.2009
    Beiträge
    54
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    hey danke, dein tipp mit den 4 "\" wars! habs geschafft. die regex sieht zwar krank aus, aber es funzt und dauert nur 2-3 ms!!

    Code:
    $pattern = '/myl\+=\'([^\\\\]*)\\\\t([^\\\\]*)\\\\t([^\\\\]*)\\\\t([^\\\\]*)\\\\t([^\\\\]*)\\\\t([^\\\\]*)\\\\r\\\\n\';/';
    nix sagen zur regex...ich weiß es ist krank
    Mein aktuelles Projekt:
    www.meine-finanzfragen.de -
    Wir haben die Antworten und Rechner rund um Ihre Finanz-Fragen.

  13. #12
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Neija, is eine große Wiederholung ^^ Bist du dir sicher, dass es immer die selbe Anzahl "Felder" sind?

  14. #13
    Benutzer
    Registriert seit
    25.02.2009
    Beiträge
    54
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    ja es sind bisher immer die gleiche anzahl gewesen und dürfte nicht abweichen. werde aber noch abfangen, ob der array gefüllt ist, wenn nicht gibt einfach eine fehlermeldung!
    Mein aktuelles Projekt:
    www.meine-finanzfragen.de -
    Wir haben die Antworten und Rechner rund um Ihre Finanz-Fragen.

  15. #14
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Ich zeig mit dem Finger nochmal schüchtern Richtung meiner Explode-Substr-Lösung

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •