Seite 1 von 1

Regular Expressions und Gruppierungen

Verfasst: 25.01.2011 23:11
von aaronmueller
Hallo zusammen!

Ich habe einen String, aus dem ich einige Teile extrahieren möchte. Konkret geht es hier um eine kleine DSL, die Menüs/Menüeinträge/Optionsfelder beschreibt. Da ich nicht mit Positionsangaben arbeiten kann (da einige Zeilen länger sind als andere), muss ich auf die integrierte PREG (RegularExpression)-Funktionen zurückgreifen.

Ich habe beispielsweise folgendes Pattern:

Code: Alles auswählen

CreateRegularExpression(0, "^([A-Z_-]+) {(.*)}")
Wende ich diesen Ausdruck auf Bspw. "MAIN_MENU {This is the main menu}" an, will ich auf die einzelnen Elemente zugreifen (die Klammern):

* MAIN_MENU
* This is he main menu

Ich habe folgendes versucht:

Code: Alles auswählen

Define Matches$(0)
Define NumberOfMatches = ExtractRegularExpression(0, Line, Matches$())
For i=0 To NumberOfMatches-1
  Debug Matches$(i)
Next
Hier erhalte ich allerdings nur einen String, und das ist der komplette. ExtractRegularExpression() scheint wohl etwas anders zu arbeiten, wie es in anderen Sprachen der Fall ist. Deshalb meine Frage: Wie stelle ich es an, um an die einzelnen Elemente zuzugreifen?

Re: Regular Expressions und Gruppierungen

Verfasst: 25.01.2011 23:21
von STARGÅTE
in dem Array Matches$ stehen auch nur alle Treffer drin die es gab.

Code: Alles auswählen

CreateRegularExpression(0, "\-\w*\-") 
Dim Matches$(0)
NumberOfMatches = ExtractRegularExpression(0, "-aa- -bb- -cc-", Matches$())
For i=0 To NumberOfMatches-1
  Debug Matches$(i)
Next
ExtractRegularExpression() arbeitet also schon richtig.

Was du gerne haben willst, wäre, sowas wie, das diese Treffer nochmals Arrays sind.
Sodass Feld 0 das gesamte Ergebnis liefert und 1 dann die erste Klammer usw.

Das geht soweit ich weiß jedoch in PB (noch) nicht.

Re: Regular Expressions und Gruppierungen

Verfasst: 25.01.2011 23:24
von TomS
Wenn dein String immer so aussieht: blabla{blubb}
dann würde ich mit StringField() arbeiten.

Code: Alles auswählen

string.s = "MAIN_MENU {THIS is the main menu}"

name.s = StringField(string, 1, "{")
klammer.s = ReplaceString(StringField(string, 2, "{"), "}", "")

Debug name
Debug klammer

Re: Regular Expressions und Gruppierungen

Verfasst: 25.01.2011 23:43
von aaronmueller
Ah danke. Hatte gehofft das nicht von Hand machen zu müssen ...