Ich habe dieses RegEx von meiner vorherigen Frage. Das Problem ist, dass es manchmal funktioniert, manchmal nicht. Ich versuchte es auf einem Online-Simulator einfügen und diese bekam: https://regex101.com/r/I3tnY4/3Literale Leerraumzeichen, die dazu führen, dass das Muster fehlschlägt (manchmal)
Der Text aus einer Datei, die ich
file_get_contents
Der Inhalt der Datei vollständig lesen verwenden, aber wenn ich laufe es durch die RegEx, um es zu filtern:
$data = file_get_contents($var);
$pat = '/intervals \[\d+\]:\s+\Kxmin = (?P<xmin>\d+(\.\d+)?) \
\s+xmax = (?P<xmax>\d+(\.\d+)?)\s+text = "(?P<text>[^"]*)"/m';
// print_r($data);
preg_match_all($pat, $data, $m);
$result = array_map(function($a){
return array_combine(['xmin', 'xmax', 'text'], $a);
}, array_map(null, $m['xmin'], $m['xmax'], $m['text']));
print_r($result);
es gibt ein leeres Array zurück. Am Anfang funktionierte es, aber als ich eine for-Schleife hinzufügte, um mehrere Dateien hochzuladen, funktionierte es nicht mehr.
Das ist auch schon passiert, als ich versucht habe, die Datei direkt nach dem Upload zu bearbeiten.
So:
if (move_uploaded_file($_FILES["uploadedfile"]["tmp_name"], $target_file)) {
if (file_exists($target_file)) {
$data = file_get_contents($target_file);
$pat = '/intervals \[\d+\]:\s+\Kxmin = (?P<xmin>\d+(\.\d+)?) \
\s+xmax = (?P<xmax>\d+(\.\d+)?)\s+text = "(?P<text>[^"]*)"/m';
preg_match_all($pat, $data, $m);
$result = array_map(function($a){
return array_combine(['xmin', 'xmax', 'text'], $a);
}, array_map(null, $m['xmin'], $m['xmax'], $m['text']));
print_r($result);
}
}
Mit dem obigen Code, der RegEx auch nicht, da das $ result Array leer war. Ich vermutete, dass die Datei noch nicht bereit war, gelesen zu werden oder so. Auch wenn ich den Inhalt der Datei ausgedruckt habe, war alles da. Was ich also gemacht habe, war, meine Seite in eine andere Datei umzuleiten, die die RegEx-Verarbeitung durchgeführt hat, und überraschenderweise hat es dort funktioniert.
Kommentar für den Downvote, bitte. Dies ist eine sehr detaillierte Frage, die von jemandem kommt, der RegEx nicht so gut beherrscht wie Sie. – hungrykoala
Ich habe nicht heruntergestimmt, aber ich wollte den Titel der Frage sehen. Bitte verwenden Sie * aussagekräftige * Titel. –
@ WiktorStribiżew Ich hatte es eilig und konnte mir nichts Besseres einfallen lassen. Obwohl das Beste, was ich mir jetzt vorstellen kann, ungefähr so ist: "Regex scheitert an preg_match_all beim Lesen von Inhalten aus der Datei mit file_get_contents" – hungrykoala