kostenloser Webspace werbefrei: lima-city


preg_match_all gibt keinen treffer aus

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    Ich hab mir ein bisschen über preg_match_all durchgelesen und daraufhin folgendes script erstellt:

    <?php 	
    	$treffer = array();
    	$url =  'meinPfad/meineDatei.php'; 
    	$input = @file_get_contents($url) or die('Could not access file: $url');
    	if ( preg_match_all('#<div id="contents">(.*)</div>#', $input, $treffer ) ) 
            {
    	          echo $treffer;
    	}
    	?>


    Allerdings bekomme ich keine ausgabe, obwohl ich mit 100%iger sicherheit weiß, dass die div existiert....
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. <?php  
    $string = "<div id="contents">hallo welt!</div>";  
    $regex = "#<div id="contents">(.*)</div>#";  
    preg_match_all ($regex, $string, $output, PREG_PATTERN_ORDER);  
    ?>  
    
    Array
    (
        [0] => Array
            (
                [0] => <div id="contents">hallo welt!</div>
            )
    
        [1] => Array
            (
                [0] => hallo welt!
            )
    
    )


    Das tag/element">Element scheint nicht zu existieren. Ich frage jetzt aber auch nicht, warum du preg_match nutzt, für diese simple Aufgabe ;)

    Beitrag zuletzt geändert: 26.1.2012 13:20:23 von fabo
  4. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    fabo schrieb:
    Das Element scheint nicht zu existieren. Ich frage jetzt aber auch nicht, warum du preg_match nutzt, für diese simple Aufgabe ;)


    Die div steht genau äh 3 zeilen über dem php code...

    Ich will eben via file_get_contentest() eine datei einlesen, die x-beliebig sein soll, dann mit preg_match_all prüfen ob die Datei existiert und dann Alles zwischen der div ausgeben, damit ich es später editieren kann... Man könnte sagen "Beitrag editieren" kommt dem schon sehr nahe...
  5. Fakt ist, dass die Regexpression funktioniert, wie erwartet.

    $treffer[1] enthält den Treffer. preg_match_all liefert ein Array zurück, keinen String. Nur so nebenbei ;)
  6. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    fabo schrieb:
    Fakt ist, dass die Regexpression funktioniert, wie erwartet.

    $treffer[1] enthält den Treffer. preg_match_all liefert ein Array zurück, keinen String. Nur so nebenbei ;)


    treffer ist ja auch als array definiert, siehe erster Post, aber trotzdem bleibt der array leer und in meiner if-anweisung hat er gar keinen wert...
  7. fabo schrieb:
    Ich frage jetzt aber auch nicht, warum du preg_match nutzt, für diese simple Aufgabe ;)


    wie würde es denn anders gehen ? ... Ressourcen schonender !?

    DOM Element auslesen ?
    über strstr() oder strpos() ?

  8. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    cptgame schrieb:
    fabo schrieb:
    Ich frage jetzt aber auch nicht, warum du preg_match nutzt, für diese simple Aufgabe ;)


    wie würde es denn anders gehen ? ... Ressourcen schonender !?

    DOM Element auslesen ?
    über strstr() oder strpos() ?



    strstr() lässt keine Platzhalter zu, wie ich es habe "(.*?)", soll heißen, dass alles zwischen der div ausgelesen wird...
  9. <?php 	
    	$treffer = array();
    	$url = 'meinPfad/meineDatei.php'; 
    	$input = @file_get_contents($url) or die("Could not access file: $url");
    	if ( preg_match_all('#<div id="contents">(.*)</div>#', $input, $treffer, PREG_PATTERN_ORDER ) ) 
            {
    	          echo $treffer[1][0];
    	}
    	?>


    Funktioniert definitiv.

    (.*?) ist kein "Platzhalter", sondern ein regulärer Ausdruck...

    @cptgame

    Dom ist schon die richtige Richtung :)

    <?php 	
    $tags = array();
    $dom = new DOMDocument;
    $dom->loadHTML('<html><body><div id="contents">hallo welt!</div></body></html>');
    
    $contents = $dom->getElementById('contents');
    
    foreach ($tags as $tag) {
    	echo $tag->nodeValue;
    }
    ?>


    So, oder so ähnlich würde ich es machen.
  10. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    fabo schrieb:
    <?php 	
    	$treffer = array();
    	$url = 'meinPfad/meineDatei.php'; 
    	$input = @file_get_contents($url) or die("Could not access file: $url");
    	if ( preg_match_all('#<div id="contents">(.*)</div>#', $input, $treffer, PREG_PATTERN_ORDER ) ) 
            {
    	          echo $treffer[1][0];
    	}
    	?>


    Funktioniert definitiv.
    So, oder so ähnlich würde ich es machen.


    Ist das getestet bei dir? :/ Bei mir geht es leider nicht... wenn ich das 1:1 kopiere und den Pfad ändere passiert gar nichts.... Meine div heißt
    <div id="contents">
  11. kill-a-teddy schrieb:
    strstr() lässt keine Platzhalter zu, wie ich es habe "(.*?)", soll heißen, dass alles zwischen der div ausgelesen wird...


    ja, schon wahr,
    also anders ran gehen, evtl halt mit strpos()

    1. suche Position1 am Ende des $teilstring1 = '<div id="contents">';
    2. suche Position2 am Anfang des $teilstring2 = '</div>';
    3. Hole String zwischen Position1 und Position2 in neue Variable ($treffer)

    aber wenn innerhalb des <div id="contents"> weitere andere <DIV> Tags sind
    dann wird das Ergebnis zu früh abgeschnitten .... evtl doch DOM Element ?

    habs es mal so getestet


    $html = '
    <body>
    <div id="page"> 
    <div id="content"> 
       <div class="post">
            <div>Text1</div>
            <div>Text2</div>
       </div>
    </div>
    blablabla
    </div>
    </body>
    '; 
    
    
    $dom = new DOMDocument();
    
    $dom->loadHTML($html);
    
    $element = $dom->getElementById('content'); 
    
    $inhalt = $dom->saveHTML($element);


    Ausgabe von $inhalt bekomme ich aber auch inklusive <div id="content"> .. </div>

    <div id="content"> 
       <div class="post">
            <div>Text1</div>
            <div>Text2</div>
       </div>
    </div>


    aber es soll ja nur der Inhalt von <div id="content"> (DAS HIER ) </div> als Treffer sein

    kann man evtl was mit child oder nodeValue machen ?


    Beitrag zuletzt geändert: 26.1.2012 14:46:16 von cptgame
  12. Ist getestet...

    mach an Stelle von

    echo $treffer[1][0];


    mal

    die(var_dump($treffer));


    Und entferne mal das @ vor file_get_contents...

    Beitrag zuletzt geändert: 26.1.2012 14:47:19 von fabo
  13. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    cptgame schrieb:
    also anders ran gehen, evtl halt mit strpos()


    Ich glaub ich bin dir ein Dankeschön schuldig. strpos hat mich auf die richtige Lösung gebracht :)


    <?php 
    $content = @file_get_contents("meinPfad/meineDatei.php");
    $pos1 = (strpos($content, '<div id="contents">')+19);
    $pos2 = strpos($content, '/#contents');
    $ergebnis = substr($content, $pos1, $pos2-$pos1);
    echo $ergebnis;
    ?>


    Beitrag zuletzt geändert: 26.1.2012 15:22:54 von kill-a-teddy
  14. 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!