Reguläre Ausdrücke

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Reguläre Ausdrücke

    Hallo,

    ich bastel mir mit PHP grad ein kleines Script, mit dem ich bei OFDb die Schauspieler zu einem Film auslesen kann. Dazu benutze ich reguläre Ausdrücke und irgendwie gibts da Probleme.

    Als erstes hab ich mir einen RegExp gebastelt und den getestet, funktioniert einwandfrei: regexp-evaluator.de

    Dann ab ich das in mein Script eingebaut und es funktioniert nicht mehr, ich habe dieselben Ausdrücke mit derselben OFDb-Seite getestet und es gibt 0 Treffer. Meine vermutung ist, dass es mit irgendwelchen Charsets zusammenhängt bin mir aber nicht sicher, deswegen der Thread hier.

    Quellcode

    1. $text = '';
    2. $ofdb = "www.ofdb.de";
    3. {
    4. $fp = fsockopen ($ofdb, 80);
    5. if ($fp) {
    6. fputs ($fp, "GET /view.php?page=film&fid=98229 HTTP/1.1 \r\n");
    7. fputs ($fp, "Host: www.ofdb.de \r\n");
    8. fputs ($fp, "Connection: close \r\n");
    9. fputs ($fp, "Accept: text/xml,application/xml,application/xhtml+xml,text/html,text/plain,image/png,*/* \r\n");
    10. fputs ($fp, "Accept-Charset: utf-8 \r\n");
    11. fputs ($fp, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1 Web-Sniffer/1.0.24 \r\n\r\n");
    12. while (!feof($fp)) {
    13. $text .= fgets($fp,128);
    14. }
    15. fclose($fp);
    16. }
    17. $pattern = '/<a href\="view\.php\?page\=liste&Name\=.*">.*<\/a>/isU';
    18. preg_match_all($pattern,$text,$treffer);
    19. print_r($treffer, TRUE);
    20. $pattern = '=<.*>=isU';
    21. $treffer = preg_replace($pattern,'',$treffer);
    22. print_r($treffer, TRUE);
    23. }
    24. ?>
    Alles anzeigen
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • So minimale Fehler sind die ärgerlichsten. Das Problem liegt nicht in den Regex, sondern in der Ausgabe ;)

    Quellcode

    1. bool print_r ( mixed expression [, bool return] )

    wenn der Parameter TRUE übergeben wird, wird der Rückgabewert von print_r von bool zum Array

    Quellcode

    1. echo print_r($b, true);


    Freut mich, wenn ich dir auch mal helfen konnte!
  • Hey,

    genau das hatte ich vorher auch geschrieben *g* Also dass der zweite Parameter unnötig ist. Aber dann war ich mir nicht so sicher, weil beim zweiten print_r das Array leer ist. Und dann dachte ich, ich häte den Fehler missverstanden (weil ich '=<.*>=isU' eh nicht verstanden hab, hab ich dann meinen Beitrag editiert *gg*)

    Nächste Mal warte ich, bis mir gesagt wird, dass ich falsch liege :lol:
  • Hey vielen Dank erstmal dafür, das hatte ich völlig ignoriert. Allerdings ist das Array leer, die Ausgabe ist die folgende:

    Array ( [0] => Array ) 1


    Er matched nichts, es muss also noch irgendetwas anderes nicht stimmen.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • also das print_r in #20 enthält die Daten.

    Was du mit dem zweiten vorhast verstehe ich nicht. Der Eingabestring ist ja leer.
    Wenn du noch irgendwas rausholen magst, dann klammer den Ausdruck einfach.
    z.B.
    $pattern = '/<a href\="(view\.php\?page\=liste&Name\=.*)">.*<\/a>/isU';
    für

    Quellcode

    1. [1] => Array
    2. (
    3. [0] => view.php?page=liste&Name=Clark+Johnson
    4. [1] => view.php?page=liste&Name=Michael+Douglas
    5. [2] => view.php?page=liste&Name=Kiefer+Sutherland
    6. [3] => view.php?page=liste&Name=Kim+Basinger
    7. [4] => ...
    8. )


    Wenn du irgendwas mit den einzelnen Array Elementen machen willst, kannst du array_map benutzen (seit ich Python kenne, meine Lieblingsfunktion)

    Quellcode

    1. $new = array_map(create_function('$a','return strtoupper($a);'), $treffer[1]);
  • Entschuldigung, das war mein Fehler. Ich habs natürlich den beim zweiten print_r rumgespielt. Da sind dann wirklich keine Daten mehr drin. Das preg_replace benutze ich um die HTML-Tags da rauszustrippen. Den RegEx hatte ich allerdings noch nicht richtig getestet und der scheint auch noch nicht zu funktionieren. Die Idee war ein RegEx zu basteln der alle Tags matched und die durch nichts zu ersetzen.

    Edit: Suchen wird belohnt, PHP hat eine Funktion strip_tags() die zusammen mit erwähntem array_map() machen einem das Leben sehr viel einfacher.

    Vielen Dank für die Hilfe.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]