RegEx: Nur Treffer anzeigen (.*)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

RegEx: Nur Treffer anzeigen (.*)

Beitrag von Delle »

Hallo,

ich habe mir folgenden Code zusammenkopiert:

Code: Alles auswählen


suchstring.s="mid"+Chr(34)+Chr(32)+"decimals"+Chr(61)+Chr(34)+"4"+Chr(34)+Chr(62)+"(.*)"+Chr(60)+Chr(47)+"span"+Chr(62)

; Beispiel innerhalb inhalt.s -> field="mid" decimals="4">100,1000</span> €

If CreateRegularExpression(0, suchstring.s)
    If MatchRegularExpression(0, inhalt.s)
      
      Debug "Treffer"
      
      Dim Result$(0)
    NbFound = ExtractRegularExpression(0, inhalt.s, Result$())
    For k = 0 To NbFound-1
      Debug Result$(k)
    Next
      
    Else
      Debug "Nix"
    EndIf
  Else
    Debug RegularExpressionError()
  EndIf
Funktioniert prima, zeigt mir aber den kompletten Match an, ich will aber eigentlich nur den Wert zwischen (.*), sprich im obigen Beispiel diese 100,1000

Muss ich das etwa selber mittels Stringfunktionen extrahieren?!

Danke!
PB 6.02 LTS + Win 11
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: RegEx: Nur Treffer anzeigen (.*)

Beitrag von STARGÅTE »

Guck dir mal RegularExpressionGroup() an
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
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: RegEx: Nur Treffer anzeigen (.*)

Beitrag von NicTheQuick »

Ich empfehle diese Seite sehr um mit Regex-Expressions herumzuspielen. Sie bietet außerdem noch allem Erklärungen: https://regex101.com/
Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: RegEx: Nur Treffer anzeigen (.*)

Beitrag von ccode_new »

Hallo Delle,

die RegEx-Bibliothek ist cool, aber auch sehr umfangreich.

Code: Alles auswählen

inhalt.s = ~"field=\"mid\" decimals=\"4\">100,1000</span> €"

If CreateRegularExpression(0, ">(.*)<")
  If ExamineRegularExpression(0, inhalt)
    While NextRegularExpressionMatch(0)
      Debug RegularExpressionGroup(0, 1) ;coole nützliche Funktion
    Wend
  EndIf
Else
  Debug RegularExpressionError()
EndIf
Oder z.B so:

Code: Alles auswählen

inhalt.s = ~"field=\"mid\" decimals=\"4\">100,1000</span> €"

If CreateRegularExpression(0, "(\d)+,(\d)+")
  If MatchRegularExpression(0, inhalt)
    
    Debug "Treffer"
    
    Dim Result$(0)
    NbFound = ExtractRegularExpression(0, inhalt, Result$())
    For k = 0 To NbFound-1
      Debug Result$(k)
    Next
    
  Else
    Debug "Nix"
  EndIf
Else
  Debug RegularExpressionError()
EndIf
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten