preg_match_all Kopfschmerzen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aufruf
code
datei
dokumentation
doofen fehler
ersetzen
funktion
http
kommentar
liegen
offset
output
pudels
string
test
text
tip
traumland
url
-
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 --- 
<test test > Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) ) --- moderated: 0 user: 2 --- 
<test test > Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) ) --- moderated: 0 user: ichbineinuser --- 
> 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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Es könnte daran liegen, dass du die PHP-Dokumentation zur Funktion
nicht gelesen hast:stream_get_contents
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
und nutzt stattfopen()
die Funktionstream_get_contents()
, oder du liest die Datei in eine Variable.file_get_contents()
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
nichts mehr zurückliefern.stream_get_contents()
-
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 -
hackyourlife schrieb:
Es könnte daran liegen, dass du die PHP-Dokumentation zur Funktion
nicht gelesen hast:stream_get_contents
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
und nutzt stattfopen()
die Funktionstream_get_contents()
, oder du liest die Datei in eine Variable.file_get_contents()
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
nichts mehr zurückliefern.stream_get_contents()
Danke, das habe ich gestern Abend wirklich nicht mehr überrissen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage