[Cologne-pm] leerzeichen im logfile

A. Pagaltzis pagaltzis at gmx.de
Sun Jun 15 14:15:09 CDT 2003


* Mike Michel <mike.michel at koeln.de> [2003-06-15 18:50]:
> diese zeilen unterscheiden sich von den normalen darin, dass
> sie mehr als 20 leerzeichen (das trennungszeichen) besitzen.
> folgendes funzt zwar, ist aber bei wenigen zeilen schon extrem
> langsam und mir graut es, dieses script auf logfiles im
> MB-bereich loszulassen.
> 
> if (/(\s.+){21}/) {

Das kommt daher, dass du zwei Quantifier (+ und {$num})
übereinander setzt, wobei Matches sich überlappen können (. kann
Sachen matchen die \s auch erkennt). Das + greift sich dann
erstmal den gesamten String, der dann mühselig wieder backtracked
werden muss damit \s ausreichend oft zu seinem Recht kommt.

*WESENTLICH* schneller geht's, wenn du das ganze so änderst, dass
sich die zwei Teile nicht überschneiden können, weil dann die
Regexmasschine nicht erst tausende Kombinationen ausprobieren
muss, welchen Teil des Strings sie welchem Teil des Regex
überlässt:

if (/(\s\S+){21}/)

> mir fällt auf anhieb nichts besseres ein, was zeilen mit mehr
> als 20 leerzeichen löscht.

Die beste Möglichkeit ist tr///:

if(tr/ // > 20)

-- 
Gruss,
Aristoteles



More information about the Cologne-pm mailing list