kostenloser Webspace werbefrei: lima-city


preg_match_all Kopfschmerzen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tchab

    tchab hat kostenlosen Webspace.

    Hey Leute,

    ich habe momentan ein richtig komisches Problem:

    Ich will einen String matchen, er gibt mir nichts zurück, auf http://www.phpliveregex.com/p/2Er funktioniert das jedoch perfekt.

    PHP-Source:
    <?php
    include 'Parsedown.php';
    //$dir = "kommentare/" . preg_replace ("|[^\\w]*|", "", $_GET['url']);
    $dir = "kommentare/jekyllartikelbilder1923r";
    
    $list_of_comments = scandir($dir);
    
    for ($commentnumber = 0; $commentnumber < count($list_of_comments); ++$commentnumber ){
    	if ($commentnumber > 1) {
    		$commentfile = fopen($dir . "/" . $list_of_comments[$commentnumber], "r");
    		print_r(stream_get_contents($commentfile));
    		print("\n");
    		print("\n");
    
    		preg_match_all("/(moderated: )(.?)/", stream_get_contents($commentfile), $moderated_preg_array);
    
    		preg_match_all("/(user: )(.*)/", stream_get_contents($commentfile), $user_preg_array);
    		print_r($user_preg_array );
    	}
    }
    ?>


    Output:
    karl@Traumland:~/Webentwicklung$ php comments-api.php 
    --- 
    moderated: 0
    user: 2
    --- 
    &NewLine;&lt;test test  >
    
    Array
    (
        [0] => Array
            (
            )
    
        [1] => Array
            (
            )
    
        [2] => Array
            (
            )
    
    )
    --- 
    moderated: 0
    user: 2
    --- 
    &NewLine;&lt;test test  >
    
    Array
    (
        [0] => Array
            (
            )
    
        [1] => Array
            (
            )
    
        [2] => Array
            (
            )
    
    )
    --- 
    moderated: 0
    user: ichbineinuser
    --- 
    &NewLine;> ein zitat darf nicht fehlen
    
    Array
    (
        [0] => Array
            (
            )
    
        [1] => Array
            (
            )
    
        [2] => Array
            (
            )
    
    )


    Und ich finde den doofen Fehler einfach nicht :/ Vielleicht hat hier ja jemand einen Tipp?

    Grüße
    tchab
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Es könnte daran liegen, dass du die PHP-Dokumentation zur Funktion
    stream_get_contents
    nicht gelesen hast:
    Identical to file_get_contents(), except that stream_get_contents() operates on an already open stream resource and returns the remaining contents in a string, up to maxlength bytes and starting at the specified offset.
    Entweder du sparst dir das
    fopen()
    und nutzt statt
    stream_get_contents()
    die Funktion
    file_get_contents()
    , oder du liest die Datei in eine Variable.

    Derzeit liest du die Datei, gibst sie aus, liest erneut, obwohl du schon am Dateiende stehst, und erwartest dir davon erneut den Text, den du an preg_* füttern kannst. Da du aber, wie gesagt, bereits am Dateiende stehst, werden weitere Aufrufe von
    stream_get_contents()
    nichts mehr zurückliefern.
  4. Dann geb' ich mal meinen Senf dazu:
    - Den returncode von preg_match_all auswerten. Vermutlich hapert's bereits hier am (fehlenden?) input.
    - Die regexen in einfache Hochkommata setzen, nur für alle Fälle.
    - Das Leerzeichen durch \s* ersetzen.
    - .* duch \S+ ersetzen.

    Summa summarum sollte es dann ungefähr so aussehen:
    rc = preg_match_all('/(user:\s*)(\S+)/', ...);


    Edit:
    hackyourlife hat offenbar parallel zu meinen Überlegungen des Pudels Kern identifiziert:-)
    <ironie>Aber regexen sind eh dafür gemacht, dauernd überarbeitet zu werden.<ironie/>

    Beitrag zuletzt geändert: 17.12.2013 22:02:25 von suge
  5. Autor dieses Themas

    tchab

    tchab hat kostenlosen Webspace.

    hackyourlife schrieb:
    Es könnte daran liegen, dass du die PHP-Dokumentation zur Funktion
    stream_get_contents
    nicht gelesen hast:
    Identical to file_get_contents(), except that stream_get_contents() operates on an already open stream resource and returns the remaining contents in a string, up to maxlength bytes and starting at the specified offset.
    Entweder du sparst dir das
    fopen()
    und nutzt statt
    stream_get_contents()
    die Funktion
    file_get_contents()
    , oder du liest die Datei in eine Variable.

    Derzeit liest du die Datei, gibst sie aus, liest erneut, obwohl du schon am Dateiende stehst, und erwartest dir davon erneut den Text, den du an preg_* füttern kannst. Da du aber, wie gesagt, bereits am Dateiende stehst, werden weitere Aufrufe von
    stream_get_contents()
    nichts mehr zurückliefern.

    Danke, das habe ich gestern Abend wirklich nicht mehr überrissen.
  6. 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!