tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von mayermart
  • 2 Beitrag von maeTimmae
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
478
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    nightryu nightryu ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    40
    Aloha, ich schon wieder
    Da mir bei meinem letzten Problem toll geholfen wurde hoffe ich dass dies hier auch nicht schwer fällt.

    Ich habe folgenden HTML-String extrahiert. nicht mehr und nich weniger jaha

    HTML-Code:
    <td class="acontent2"><a class="tooltip">Action<span><strong>Action</strong><br />Kampf- und Gewaltszenen</span></a>, <a class="tooltip">Adventure<span><strong>Adventure</strong><br />In der Regel wird viel erlebt und/oder Darsteller reisen viel</span></a>, <a class="tooltip">Drama<span><strong>Drama</strong><br />Viele Dialoge, Konflikte als Element der Handlungs; Happy-End nicht garantiert</span></a>, <a class="tooltip">Shoujo<span><strong>Shoujo</strong><br />Inhalte eher an M&auml;dchen gerichtet</span></a>, <a class="tooltip">SciFi<span><strong>SciFi</strong><br />Spielt in einer technisch &uuml;berlegenen Zukunft/Parallelwelt</span></a>
    ist alles in einer Tabelle, wenn auch sehr unübersichtlich

    das Ganze steckt in einer Variable ($temp)
    nun möchte ich nur die Genrebezeichnungen die zwischen den strong-tags selbst stehen in ein kleines array in der Form
    $g[1] = "Action"
    $g[2] = "Adventure"
    ... usw ...

    zur verfügung stehen die DOM Erwiterung und aus Erfahrung durch meine vorige Frage auch die JS_Extractor Klasse (siehe http://jacksleight.com/code). Leider reicht mein Verständnis nicht aus das ganze auf mein Problem als Antwort zu bilden. ich wäre sehr dankbar wenn ihr mir da helfen könntet
     

  2. #2
    Avatar von maeTimmae
    maeTimmae maeTimmae ist offline Mitglied Platin
    Registriert seit
    Aug 2007
    Ort
    Erfurt, Saarbrücken, Leipzig und Fulda
    Beiträge
    515
    PHP-Code:
    <?php

    $temp 
    = <<<TEMP
    <td class="acontent2"><a class="tooltip">Action<span><strong>Action</strong><br />Kampf- und Gewaltszenen</span></a>, <a class="tooltip">Adventure<span><strong>Adventure</strong><br />In der Regel wird viel erlebt und/oder Darsteller reisen viel</span></a>, <a class="tooltip">Drama<span><strong>Drama</strong><br />Viele Dialoge, Konflikte als Element der Handlungs; Happy-End nicht garantiert</span></a>, <a class="tooltip">Shoujo<span><strong>Shoujo</strong><br />Inhalte eher an M&auml;dchen gerichtet</span></a>, <a class="tooltip">SciFi<span><strong>SciFi</strong><br />Spielt in einer technisch &uuml;berlegenen Zukunft/Parallelwelt</span></a>
    TEMP;

    $regex "%<strong>(.+)</strong>%Uis";
    // %                        -> gewählter Regex-Delimiter
    // <strong>... </strong>    -> trivial
    // (.+)                        -> Gruppe beliebig vieler Zeichen (mindestens eines) zwischen den Tags
    // Uis                        -> Modifier:
    //            -> U ~ ungreedy,            sucht also nicht nach <strong>(...</strong>)</strong> oder ähnlichen Sachen
    //            -> i ~ incase sensitive,    ignoriere Groß- und Kleinschreibung für das Zutreffen des Regex (STRONG, strong, StRoNg werden gleichermaßen akzeptiert)
    //            -> s ~ singleline,            Zeilenumbrüche werden ignoriert, und der Regex auf die gesamte Zeichenkette angewandt

    if ( preg_match_all$regex$temp$matchesPREG_PATTERN_ORDER ) ) {
        
    // Wenn Treffer vorhanden, weise das zweite Unterarray an gewünschte Variable zu. Das erste enthält die gesamten Treffer
        
    list( , $g ) = $matches;
        
    var_dump$g );
    }
    preg_match(), preg_match_all()
     

  3. #3
    Avatar von Jacka
    Jacka Jacka ist offline Mitglied Brokat
    Registriert seit
    Sep 2004
    Beiträge
    390
    Hi!

    Alternativ mit dem JS_Extractor:
    PHP-Code:
    $extractor = new JS_Extractor(file_get_contents('sample.php'));
    $body $extractor->query("body")->item(0);

    $i 0;
    foreach (
    $extractor->query("//a") as $link) {
        
    $output $link->extract('span/strong');
        
    $data[$i] = $output[0];
        
    $i++;

    (Praktische Klasse!)

    Viele Grüße,
    Jacka
     
    Biologie ist das was lebt, Chemie das was kracht und Physik das, wo nichts funktioniert!

    - - - - - - - - - - - - - - - -

    Open Source JS-Framework für Business Web-Applications: ExtJS

  4. #4
    nightryu nightryu ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    40
    hammergeilo =D
    Vielen Dank euch beiden.
    @Jacka: ich bevorzuge diese Lösung, das ganze ist wirklich toll
    Wähle das, weil ich mal gehört hab das die regex-engine recht "lahm" ist wenn mans wirklich nur wegen kleinigkeiten wie diesen braucht
    @MaeTimmae: ich muss mir unbedingt deine Kommentare zu Gemüte führen, ich glaub die helfen mir gut dabei das ganze Regex zu verstehen Vielen Dank auch für deine Lösung, die auch 1a funktioniert!

    Nochmals vielen Dank. Ich hoffe dass andere dies hier auch gut finden und dadurch weiterkommen =)
    Eine Gute Nacht wünsche ich noch. Bei mir steht morgen schriftliche Abschlussprüfung für FI-SI an :S
    Geändert von nightryu (07.05.08 um 00:00 Uhr)
     

  5. #5
    mayermart mayermart ist offline Mitglied Bronze
    Registriert seit
    Oct 2007
    Ort
    Dorfen (Bayern)
    Beiträge
    41
    Sorry wenn ich mich hier kurz einmische..

    Was bewirkt diese Konstellation?
    Habe das noch nie gesehen und über Google findet man beim Suchbegriff "<<<TEMP" alles andere als das was man sucht
    Wäre schön wenn mich jemand aufklären könnte oder einen Link hätte
    PHP-Code:
    $temp = <<<TEMP
    <td class="acontent2"><a class="tooltip">Action<span><strong>Action</strong><br />Kampf- und Gewaltszenen</span></a>, <a class="tooltip">Adventure<span><strong>Adventure</strong><br />In der Regel wird viel erlebt und/oder Darsteller reisen viel</span></a>, <a class="tooltip">Drama<span><strong>Drama</strong><br />Viele Dialoge, Konflikte als Element der Handlungs; Happy-End nicht garantiert</span></a>, <a class="tooltip">Shoujo<span><strong>Shoujo</strong><br />Inhalte eher an M&auml;dchen gerichtet</span></a>, <a class="tooltip">SciFi<span><strong>SciFi</strong><br />Spielt in einer technisch &uuml;berlegenen Zukunft/Parallelwelt</span></a>
    TEMP; 
    nightryu bedankt sich. 

  6. #6
    Avatar von maeTimmae
    maeTimmae maeTimmae ist offline Mitglied Platin
    Registriert seit
    Aug 2007
    Ort
    Erfurt, Saarbrücken, Leipzig und Fulda
    Beiträge
    515
    Zitat Zitat von Jacka Beitrag anzeigen
    Alternativ mit dem JS_Extractor:
    Das sieht natürlich um einiges hübscher aus!
    Einen kleinen Verbesserungsvorschlag hätte ich aber für dein Snippet:
    PHP-Code:
    $extractor = new JS_Extractor(file_get_contents('sample.php'));
    $body $extractor->query("body")->item(0);

    foreach (
    $extractor->query("//a") as $link) {
        
    $output $link->extract('span/strong');
        
    // $i wird nicht benötigt, ist sogar in PHP langsamer als die generische Indexierung
        
    $data[] = $output[0];

    Zitat Zitat von nightryu Beitrag anzeigen
    Wähle das, weil ich mal gehört hab das die regex-engine recht "lahm" ist wenn mans wirklich nur wegen kleinigkeiten wie diesen braucht
    Ich habe mir die JS-Klasse(n) nicht nicht angeschaut, würde aber spontan darauf Tippen, dass sie entweder ebenfalls mit regulären Ausdrücken, oder über das DOM arbeitet, dessen Abarbeitung auch sehr häufig über reguläre Ausdrücke gemacht wird (sofern es kein richtiger Parser ist). Letztenendes aber sollte es bei solchen Sachen vor allem um sauberen Code gehen, und da gefällt mir die JS-Query-Lösung auch besser.

    Zitat Zitat von nightryu Beitrag anzeigen
    Eine Gute Nacht wünsche ich noch. Bei mir steht morgen schriftliche Abschlussprüfung für FI-SI an :S
    Viel Glück, sofern du es noch brauchst!

    Zitat Zitat von mayermart Beitrag anzeigen
    Was bewirkt diese Konstellation?
    PHP-Code:
    $temp = <<<TEMP
    ...
    TEMP; 
    Siehe die Informationen zur Heredoc-Stringnotation in PHP, alternativ ließe sich also genauso das hier...
    PHP-Code:
    $temp "..."
    ... tippen. Mag die Heredoc-Notation für solche Dinge aber eher, dadurch die Delimiter Anfang und Ende gut erkennbar sind.
    nightryu und mayermart bedanken sich. 

  7. #7
    Avatar von Jacka
    Jacka Jacka ist offline Mitglied Brokat
    Registriert seit
    Sep 2004
    Beiträge
    390
    Einen kleinen Verbesserungsvorschlag hätte ich aber für dein Snippet
    Stimmt. So gehts auch und ist auch noch kürzer!
    Das das schneller ist wusste ich noch garnicht.

    Wieder was dazu gelernt, vielen Dank!

    Viele Grüße,
    Jacka

    P.S. nightryu, ich hoffe es läuft gerade gut bei dir! "daumendrücken"
     
    Biologie ist das was lebt, Chemie das was kracht und Physik das, wo nichts funktioniert!

    - - - - - - - - - - - - - - - -

    Open Source JS-Framework für Business Web-Applications: ExtJS

  8. #8
    nightryu nightryu ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    40
    Vielen Dank, Habs grad in meinem Skript geändert!
    Habs gestern geschafft, Die Fachquali war irgendwie mies =/ war einiges dran was ich nie in der schule oder auf arbeit und auch nich im IT-Handbuch finden könnte =/ Sowas wie zB Subnetting ging noch... aber Header-auslesen ausm IPv6 Header und ausm IPv4 Header is echt schon ne Härte :S
    Kernquali kam wider aller Erwartungen überhauptnichts mit Datenbanken, UML, Planung, oder irgendwas programmierrelevantes dran..
    Und WiSo war nur ein Mix aus den Fragen von den Prüfungen 2002-2006 "

    Ich mach mir nur um die Fachquali sorgen, ansonsten gehts eigentlich. Jetz nurnoch am 26.8. die Projektpräsentation und -verteidung schaffen :o)
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 10.07.08, 23:11
  2. Antworten: 3
    Letzter Beitrag: 30.10.04, 20:31
  3. Antworten: 0
    Letzter Beitrag: 20.04.04, 23:11
  4. Zahlen aus einem String filtern
    Von jenno im Forum PHP
    Antworten: 3
    Letzter Beitrag: 02.02.04, 15:18