tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von saftmeister
  • 1 Beitrag von Yaslaw
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
442
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von creativeheadz
    creativeheadz creativeheadz ist offline Mitglied Gold
    Registriert seit
    May 2005
    Beiträge
    198
    Hallo ich habe eine .txt Datei mit folgendem Inhalt.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     
    <div id="tag">12</div>
    <div id="monat">03</div>
    <div id="jahr">1988</div>
     
    <div id="tag">22</div>
    <div id="monat">06</div>
    <div id="jahr">1983</div>
     
    usw.

    Nun möchte ich immer den Tag den Monat und Das Jahr in einer variable speichern.


    Mit welchem PHP Befehl kann ich beispielsweise <div id="tag">12</div> suchen ? (preg_match?) und dann die 12 herausfiltern und in Variable $tag speichern. Der HTML Code ist uninteressant.

    Hat da jemand ne idee?
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Jep. preg_match() ist die Lösung
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Avatar von creativeheadz
    creativeheadz creativeheadz ist offline Mitglied Gold
    Registriert seit
    May 2005
    Beiträge
    198
    Nicht ganz glaub, weil ich ja nur den String "<div id="tag">" dann kann ich zwar schoneinmal diesen Div Tag filtern jedoch muss ich ja irgendwie alles was in diesen Divs steht herausbekommen. also nur die 12 oder nur die 22 etc...
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Doch, Reguläre AUsdrücke sind genau das was du haben willst.
    Habs mal auf die schnelle geteset

    Hier der ganze Test:
    http://regexp-evaluator.de/evaluator...3c99/#ergebnis

    Und dies war der Pattern
    PHP-Code:
      $pattern '/<div id="tag">([^<]+)<\/div>/isU'
    Achja, halt nicht preg_match sondern preg_match_all() da du ja mehrere Resulate haben willst.
    creativeheadz bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Man kann es auch so lösen:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    <?php
    error_reporting(E_ALL|E_STRICT);
    ini_set('display_errors', 1);
     
    /** Read in the file **/
    $contents = file_get_contents('partread.txt');
    /** Explode it into an array **/
    $lines = explode("\n", $contents);
    /** Append as last element the end-node **/
    array_push($lines, '</node>');
    /** Append as first element the begin-node **/
    $lines = array_merge(array('<node>'), $lines);
    /** Walk over each line and check if it is empty **/
    foreach($lines as $lineno => $content)
    {
      /** If its empty, add set it to end-node and begin-node **/
      if($content == ' ')
        $lines[$lineno] = "</node>\n<node>";
    }
    /** Implode all lines as one single string **/
    $contents = implode("\n", $lines);
    /** Embed all nodes into a nodes root element **/
    $contents = '<nodes>' . $contents . '</nodes>';
     
    /** Create a XML object for easy parsing **/
    $xml = new SimpleXMLElement($contents);
     
    /** Just for debugging **/
    //var_dump($xml);
     
    foreach($xml as $node)
    {
      /** Just for your information **/
      //var_dump($node);
      
      /** Now we have all single informations **/
      $day   = $node->div[0];
      $month = $node->div[1];
      $year  = $node->div[2];
      
      /** Here we are! **/
      echo "$year-$month-$day<br/>";
    }

    Produziert diese Ausgabe:

    Code :
    1
    2
    
    1988-03-12
    1983-06-22
    Angehängte Dateien Angehängte Dateien
    Geändert von saftmeister (22.12.11 um 00:10 Uhr) Grund: Tag und Monat waren vertauscht
    creativeheadz bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  6. #6
    Avatar von creativeheadz
    creativeheadz creativeheadz ist offline Mitglied Gold
    Registriert seit
    May 2005
    Beiträge
    198
    Super! Das is denke ich echt genau das was ich benötige Da ich in meinem Ausgangsbeispiel den Inhalt der Textdatei stark vereinfacht dargestellt habe, muss ich nun doch nocheinmal etwas nachfragen. Der Inhalt der Textdatei ist ein HTML Quelltext. Das bedeutet, dass in der Datei, neben den <div id="tag"></div> Tag's etc. noch weitere <div> Container als auch Tabellen usw. vorhanden sind.

    Mein PHP Code:

    PHP-Code:
      $myFile "source.txt";

     
    $handle fopen($myFile'r'); 
     
     while (!
    feof($handle)){ 
     
      
    $subject fgets($handle50);

      
    $pattern '/<div class="header">([^<]+)<\/div>/isU';

      
    $result preg_match_all($pattern$subject$subpattern);

      echo 
    '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
           ((
    $result) ? $result.' mal ' 'nicht ').'zu.</p>';
           

      echo 
    '<pre>'.print_r($subpatternTRUE).'</pre>';
     
     } 
     
     
    fclose($handle); 

    Auszug aus der Textdatei:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    <div id="p2935449" class="productlistPopup" onmouseover="this.style.visibility='visible';" onmouseout="this.style.visibility='hidden';">
    <div class="header">
    Acer Aspire X3990 
    </div>
    <img class="productPic" id="img_p2935449" src="/pics/common/gifspacer.gif" width="168" height="140" alt="" />
    </div>
    </td>
    <td width="100%" style="padding-left:5px; padding-right:5px;" valign="top" align="left" class="cellborder">
    <a class="b fs13" href="/preisvergleich/OffersOfProduct/2935449_-aspire-x3990-pt-sgke2-acer.html">Acer Aspire X3990 (PT.SGKE2)</a>
    &nbsp;(PC-System)
    <a href="/preisvergleich/OffersOfProduct/2935449_-aspire-x3990-pt-sgke2-acer.html" class="fs10" style="text-decoration:none;">
    <span class="nobr">
    <img src="/pics/rating/orange.gif" width="10" height="10" alt="Besucher-Produktbewertung für Acer Aspire X3990 (PT.SGKE2): 5,0 Sterne" border="0"/><img src="/pics/rating/orange.gif" width="10" height="10" alt="" border="0"/><img src="/pics/rating/orange.gif" width="10" height="10" alt="" border="0"/><img src="/pics/rating/orange.gif" width="10" height="10" alt="" border="0"/><img src="/pics/rating/orange.gif" width="10" height="10" alt="" border="0"/>
    </span>
    </a>
    <br/>

    Ausgegeben soll nun nur:

    Code :
    1
    2
    3
    
    <div class="header">
    Acer Aspire X3990 
    </div>

    Angeblich wird keine übereinstimmung mit dem pattern gefunden .
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ist logisch. Mit fgets() gehst du die Datei schrittweise (50 Zeichen pro schritt) durch und vergleichst die Teilstrings mit dem pattern. Wenn Die Datei aber gerade in diesem Bereich geteilt wird, dann gehts nicht mehr

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    <div id="p2935449" class="productlistPopup" onmous
     
    eover="this.style.visibility='visible';" onmouseou
     
    t="this.style.visibility='hidden';">
    <div class="h
     
    eader">
    Acer Aspire X3990 
    </div>
    <img class="prod

    Du würdest besser file_get_contents() nehmen und die ganze Datei auf einmal einlesen

    PHP-Code:
      $myFile "source.txt";
      
    $subject file_get_contents ($myFile);
      
    $pattern '/<div class="header">([^<]+)<\/div>/isU';
      
    $result preg_match_all($pattern$subject$subpattern);
      echo 
    '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
           ((
    $result) ? $result.' mal ' 'nicht ').'zu.</p>';
      echo 
    '<pre>'.print_r($subpatternTRUE).'</pre>'
    creativeheadz bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  8. #8
    Avatar von creativeheadz
    creativeheadz creativeheadz ist offline Mitglied Gold
    Registriert seit
    May 2005
    Beiträge
    198
    Saustark! Vielen Dank für die schnelle Hilfe und ein frohes Weihnachtsfest
     

  9. #9
    Avatar von creativeheadz
    creativeheadz creativeheadz ist offline Mitglied Gold
    Registriert seit
    May 2005
    Beiträge
    198
    Jetzt wollte ich das ganze mit nem Bild Tag machen, da in diesem Tag alle Infos drin stehen die ich benötige und habe versucht den Regulären Ausdruck abzuändern:

    PHP-Code:
    $pattern '/<img class="osimg"([^<]+)\" />/isU'

    Code :
    1
    
    <img class="osimg" border="0" src="s1_produktbild.gif" title="Canon EOS 600D " alt="Canon EOS 600D Kit 18-55 mm" />

    src="" und title="" sind für mich interressant.

    Als Fehlermeldung erhalte ich:


    Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '>' in C:\xampp\htdocs\ps\find.php on line 8


    Bezieht sich das auf >/isU ? Wenn ja wie kann muss der richtige modifier aussehen ?
     

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    / muss escapte werden -> \/

    Und die Werte kannst du doch auf einmal auslesen
    Code :
    1
    
    /<img class="osimg".*src="([^"]+)".*title="([^"]+)".*\/>/isU
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Teil einer Seite auslesen
    Von EGJSoldier im Forum PHP
    Antworten: 8
    Letzter Beitrag: 21.07.09, 17:52
  2. Teil einer statischen URL auslesen
    Von makesomenoise im Forum PHP
    Antworten: 8
    Letzter Beitrag: 22.05.09, 13:19
  3. Teil einer URL auslesen
    Von AHelfer im Forum PHP
    Antworten: 4
    Letzter Beitrag: 05.03.08, 10:28
  4. Teil einer URL auslesen
    Von low-group im Forum PHP
    Antworten: 4
    Letzter Beitrag: 20.02.04, 19:12
  5. Antworten: 1
    Letzter Beitrag: 17.07.01, 00:41