ANSI C und Regular Expressions

BrainPain

Well-Known Member
Hallo Leute,

ich habe einen Pattern-String in welchem die beiden Platzhalter * und ? vorkommen können und möchte gerne prüfen ob ein anderer String auf dieses Pattern zutrifft. Klingt für mich nach einer Standardfunktionalität, jedoch kann ich mich nicht erinnern jemals mit Regular Expression unter C gearbeitet zu haben. Hat jemand einen Tipp für mich?

Viele Grüße
 
Die pcre Bibliothek stellt entsprechende Funktionen zur Verfuegung und ist ziemlich weit verbreitet.

HTH
 
Ich bin mir nicht ganz sicher ob glob() mir weiterhelfen kann, weil ich es einfach nicht kenne. Im Manual steht irgendwas von Pathnames!? Ist es denn eine Standardfunktion, also auf allen OS verfügbar? Kannst du mir bitte mal ein Beispiel geben?

PCRE scheidet leider aus weil in unserem Projekt keine Fremdbibliotheken verwendet werden dürfen.

Der aktuelle Lösungsvorschlag ist diese RegExp-Prüfung mittels SQL auf die Datenbank zu verlagern was natürlich nicht sehr schön ist.

Viele Grüße
 
Vielleicht schaust Du Dir mal fnmatch(3) mal an. Das ist einfacher zu bedienen. glob(3) macht Matching wie fnmatch(3), aber auf einer Liste von Strings.

glob/fnmatch sollte auf den meisten Systemen vorhanden sein. Bei Exoten wie MS-Windows ist das vielleicht der Fall. Sie sollen ja auch POSIX-konform sein. Was das auch immer heißen mag.

Bei ANSI wird's, glaube ich, hoffnungslos.

Eigentlich sollte aber so ein einfacher Matching-Algo keine großen Schwierigkeiten bereiten. Jemand der im 1sten oder 2ten Semester in Informatik aufgepasst hat, sollte Dir einen linearen Algo hinschreiben können.
 
Bei ANSI wird's, glaube ich, hoffnungslos.

Eigentlich sollte aber so ein einfacher Matching-Algo keine großen Schwierigkeiten bereiten. Jemand der im 1sten oder 2ten Semester in Informatik aufgepasst hat, sollte Dir einen linearen Algo hinschreiben können.

Leider geht es ja um ANSI.

Naja, ich habe Informatik studiert und sehe das wohl etwas anders als du. Klar ist es machbar soetwas zu implementieren jedoch schätze ich den Aufwand relativ hoch ein gerade hinsichtlich der Kombinationsmöglichkeiten. Und das wird der Kunde nicht bezahlen wollen.
Das ist nur eine kleiner Teil des CR wofür insgesamt 1 Manntag veranschlag wurde.

Viele Grüße
 
regcomp, regexec, regerror, regfree - gehören zur libc
(in den jeweiligen manuals)

#include <regex.h>

Pattern-Algos selbst schreiben kann man zwar machen. Ein guter Suchbegriff ist hier Knuth-Morris-Pratt-Algorithmus. Nach dem Lesen kann dann jeder selbst entscheiden, ob er das *mal eben* selbst schreiben will. ;-)
 
für regex(3) brauchst d uauch regular expressions. das sind nicht * und ? als "platzhalter".

wenn es um dateinamen geht, kannst du * und ? als "platzhalter" mittels glob(3) auflösen lassen.

ansonsten musst du den string mit den * und ? als "platzhalter" erst mal in einen regulären ausdruck konvertieren - hierbei musst du dann natürlich auch beachten, welche zeichen du maskieren musst, etc...

auf bald
oenone
 
Zurück
Oben