[nr-pm] regex
Ingo Wichmann
wichmann at uni-wuppertal.de
Die Mar 19 11:16:44 CST 2002
Hallo liebe Leute!
Ich habe ein kleines Problem an dem ich jetzt schon ein paar Stunden
rumbastele:
Ich habe ein paar Dateien die Objektbeschreibungen in der Sprache
EXPRESS beinhalten. Das sieht an einer Stelle z.B. so aus:
Kennung : STRING(1);
Langtext : STRING;
UNIQUE
Kennung_eindeutig : Kennung;
Die allgemeine Formulierung in der Norm ist folgende:
entity_body = { explicit_attr } [ derive_clause ] [inverse_clause]
[unique_clause] [where_clause]
Soll wohl soviel heißen wie:
Zu Beginn gibt es immer einen Bereich explicit_attr, dann folgen evtl.
weitere andere Bereiche.
Die anderen Bereiche werden immer durch ein Schlüsselwort eingeleitet,
im Beispiel oben war das "UNIQUE"
So. Das möchte ich jetzt mit perl einlesen. Die einzelnen Bereiche
sollen dabei in Variable mit den Namen $explicit_attr, $derive_clause,
... wandern.
Mein Versuch ...
($explicit_attr = $entity_body) =~
s/^(.*?)(?:DERIVE|INVERSE|UNIQUE|WHERE)?/$1/s;
($derive_clause = $entity_body) =~
s/DERIVE(.*?)(?:INVERSE|UNIQUE|WHERE)?/$1/s;
($inverse_clause = $entity_body) =~
s/INVERSE(.*?)(?:DERIVE|UNIQUE|WHERE)?/$1/s;
... scheitert kläglich.
Wo ist der Fehler?
Ich gehe die erste Regex mal durch:
^ Der Anfang des Textes
(.*?) beliebige Zeichen bis
(?:DERIVE|INVERSE|UNIQUE|WHERE)? einmal oder keinmal eines der
Schlüsselwörter auftaucht
Die beliebigen Zeichen sind $1.
Ich habe ein komplettes Beispielskript mal angehängt.
Ich würde mich freuen, wenn jemand mir da weiterhelfen könnte...
Ciao,
Ingo
P.S.: Falls jemand was mit EXPRESS oder OKSTRA anfangen kann: das
komplette Programm gibts unter
http://savannah.gnu.org/projects/okstraperl/ unter express2perl
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde geschreddert...
Dateiname : test.pl
Dateityp : application/x-perl
Dateigröße : 883 bytes
Beschreibung: nicht verfügbar
URL : http://mail.pm.org/archives/niederrhein-pm/attachments/20020319/aff9102a/test.bin