Regular Expressions und Gruppierungen

Für allgemeine Fragen zur Programmierung mit PureBasic.
aaronmueller
Beiträge: 11
Registriert: 13.01.2011 23:51

Regular Expressions und Gruppierungen

Beitrag 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?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Regular Expressions und Gruppierungen

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Regular Expressions und Gruppierungen

Beitrag 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
aaronmueller
Beiträge: 11
Registriert: 13.01.2011 23:51

Re: Regular Expressions und Gruppierungen

Beitrag von aaronmueller »

Ah danke. Hatte gehofft das nicht von Hand machen zu müssen ...
Antworten