Nun suchen wir nach dem Ortsnamen ‚Au‘. Das ist zwar nur eine Suche, aber sie liefert uns leider auch ‚Auge‘, ‚Auto‘, usw.
In DOS-Pascal mache ich das so:
Code: Alles auswählen
FUNCTION enthaelt(einKette:STRING;prfKette:STRING;genau:BOOLEAN):BOOLEAN;
{ Die Funktion prüft, ob ein Zeichen oder eine Zeichenkette in einer anderen
enthalten ist und gibt entsprechend ja o. nein zurück. Mit dem Param. genau
kann die Groß- und Kleinschreibung ausgeschaltet werden.
einKette: String, in dem gesucht werden soll. (längerer String)
prfKette: Suchbegriff, der in einKette enthalten sein soll.
(kürzerer String)
genau: wenn wahr, wird Groß- u. Klein berücksichtigt.
}
VAR
tmpEin,
tmpPrf : STRING; { Suchbegriff }
zaehl : BYTE;
BEGIN
IF genau = ja_ THEN BEGIN
tmpEin := einKette;tmpPrf := prfKette;END
ELSE BEGIN
tmpEin := fGross(einKette);tmpPrf := fGross(prfKette);
END{IF};
entHaelt := ne_;
FOR zaehl := 1 TO len(tmpEin)-(len(tmpPrf)-1) DO
IF COPY(tmpEin,zaehl,len(tmpPrf)) = tmpPrf THEN BEGIN
enthaelt := ja_;
BREAK;
END{IF};
{ENDFOR};
END; { F. enthaelt }
Wir wollen aber nur Treffer bei denen ‚Au‘ ein eigenständiges Wort ist
liefert die Funktion zwar (noch) nicht, könnt' ich aber locker einpflegen ,wenn gewünscht.
In einem Logfile interessieren uns alle Zeilen, die mit ‚incoming‘ beginnen. Wenn ‚incoming‘ irgendwo sonst innerhalb der Zeile vorkommt interessiert es uns nicht. Eine solche Unterscheidung ist mit einer Stringsuche nicht möglich.
Mache mich anheischig, mit Pascal eine Stringsuche zu formulieren, die das kann.
Ich habe, wie schon mehrfach gesagt, keine Ahnung von REs. Nutze ich die trotzdem?