[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