2016-12-04 1 views
1

Ziel ist es, ein Chat-Protokoll auf maximal 100 Zeilen zu kürzen (wenn jede neue Zeile hinzugefügt wird), indem die Datei von der Festplatte in eine Zeichenfolge (anhängendes \ n \ n) gelesen und dann abgeschnitten wird Funktion preg_match ein Muster von bis zu 100 Zeilen und geben Sie die erste Instanz dieser Übereinstimmung, dann schreiben Sie die Übereinstimmung auf die Datei.php truncate mit grep preg_match

Das funktioniert alles ohne die Funktion truncate. Das preg_match-Muster wird in einer TextWrangler-Datei korrekt ausgewählt. Das Hinzufügen der abgeschnittenen Funktion führt jedoch dazu, dass der gesamte Text gelöscht wird.

$existing= file_get_contents('LOG.txt') ; 
// get new text-line $addnew from POST 
$addnew=$addnew."\n\n"; 
$newlog = $addnew.$existing ; 
$newlog = truncate ($newlog) ; 
file_put_contents('LOG.txt',$newlog); 

function truncate ($string) { 
    preg_match('#^[(.*?)\n\n]{0,100}#',$string,$match); 
    if (isset ($match[0])) { 
     $string=$match[0]; 
    } 
    return $string ; 
} 

Was braucht das? Vielen Dank.

+0

Verwenden Sie Zeichenklasse nicht, verwenden Sie stattdessen: '^ (.? * \ N \ n) {0.100}' – Toto

+0

Perfect. Vielen Dank. – Andante88

+0

Was hat das mit dem UNIX-Tool 'grep' zu tun? Wenn die Antwort nichts ist, wie es scheint, dann bearbeiten Sie bitte Ihre Frage, um das Tag zu entfernen. –

Antwort

0

^[(.*?)\n\n]{0,100} ist eine Zeichenklasse, die 0 bis 100 oder einer der (. oder * oder ? oder ) oder \n bedeutet.

Ich glaube, Sie wollen:

preg_match('#^(.*?\n\n){0,100}#',$string,$match) 
+0

Perfekt. Vielen Dank. – Andante88

+0

@ Andante88: Gern geschehen, froh, dass es hilft – Toto