Problem mit preg_match_all

Guten Abend,
zur Zeit baue ich ein kleines Control Panel, dabei nutze ich in einer Seite die Funktion preg_match_all… Nunja ich erklär zunächst mal den Sachverhalt.

Ich habe eine Datei namens “ban.log” welche ich vollständig mit PHP in eine Variable lade. In dieser Variable / Datei ist der Inhalt nach folgendem Prinzip angeordnet:

AdmCmd: [Test]Wutschkooo wurde von [LoH]Alf gebannt, Grund: XYZ (3-10-2010)\n AdmCmd: Jan wurde von [LoH]Junge gebannt, Grund: XYZ (3-15-2010)\n AdmCmd: [Test]Wutschkooo wurde von [LoH]Dingens gebannt, Grund: Wusa (3-16-2010)\n AdmCmd: DerDa wurde von XX gebannt, Grund Wusaha (3-19-2010)\n
Zeilenumbrüche werden als \n dargestellt.

Nun möchte ich allerdings filtern, sodass die letzte Zeile in der irgendetwas mit [Test]Wutschkooo vorkommt nur noch return’t wird.

Versucht habe ich es vergeblich mit dieser Funktion:

function suchban($input){ preg_match_all('#\AdmCmd: [Test]Wutschkooo wurde von (?<by>.+?) gebannt, Grund: (?<reason.+?)#s', $input, $matches, PREG_SET_ORDER); foreach ($matches as $wert) { $output = $wert[0]; } return $output; }
Da bei jedem Treffer die $output-Variable überschrieben wird hab ich gehofft das am schluss nur die letzte Stelle übrig bleibt, doch es kommt leider überhaupt nichts raus :frowning:

Hoffe mir kann jemand helfen.

DANKE!!!

Hallo

Habe ich richtig verstanden: du willst die letzte Zeile, in der [Test] vorkommt auslesen?

An deiner Stelle würde ich die Datei mit file() einlesen, danach entweder das zurückgegebene Array von untenher durchlaufen oder dieses Array mit array_reverse() umkehren und dann mit foreach durchlaufen.
Beim Durchlaufen musst du dann halt überprüfen, ob am Zeilenanfang “AdmCmd: [Test]” steht.

Freundliche Grüsse
cedl

Wäre das nicht ein klassischer Fall für eine Datenbank und vernünftige Normalisierung?