Seite 1 von 1

PregMatch()

Verfasst: 22.12.2015 22:35
von Domino
Nachbildung von PHPs preg_match():

Code: Alles auswählen

Dim Teile.s(3)
Dim Auflosung.s(30)
Declare.l PregMatch(Pattern.s, String.s, Array Arr.s(1))
Teile(0) = "480x360"
Teile(1) = "640x480 [SAR 16:11]"
Teile(2) = "852x640 [DAR 320:121]"
Teile(3) = "1136x852 [SAR 16:11 DAR 320:121]"

For i=0 To 3
  Debug PregMatch("(\d+)x(\d+)( \[(SAR \d+:\d+)?\s?(DAR \d+:\d+)?\])?", Teile(i), Auflosung())
  Debug ""
Next i

;{ PregMatch()
;PregMatch() ist eine Nachbildung von PHPs preg_match() für die sogenannten regulären Ausdrücke,
;englisch „regular expressions“ oder kurz REGEX. Die Argumente Flags und Offset der PHP-Vorlage
;werden dabei noch nicht unterstützt. PregMatch prüft einen Text per Suchmuster auf Übereinstim-
;mungen und übernimmt diese in ein Feld. Enthält das Suchmuster einen Fehler, wird 0 zurückgegeben.
;Nicht vergessen: Die PCRE-Lizenz in den Quelltext kopieren!
Procedure.l PregMatch(Pattern.s, String.s, Array Arr.s(1))
  If CreateRegularExpression(0, Pattern)
    If ExamineRegularExpression(0, String)
      Debug "Count: "+CountRegularExpressionGroups(0)
      NextRegularExpressionMatch(0)   ; genau 1x durchlaufen
      For i=1 To CountRegularExpressionGroups(0)
        Arr(i) = RegularExpressionGroup(0, i)
        Debug "Group "+i+": "+RegularExpressionGroup(0, i)
      Next i
    EndIf
    FreeRegularExpression(0)
    ProcedureReturn 1
  Else
    Debug RegularExpressionError()
    ProcedureReturn 0
  EndIf
EndProcedure
;}

Re: PregMatch()

Verfasst: 22.04.2016 17:59
von Sicro
Wird in CodeArchiv unter Strings/PHP_PregMatch.pbi in abgewandelter Form aufgenommen:

Code: Alles auswählen

;{ PregMatch()
;PregMatch() ist eine Nachbildung von PHPs preg_match() für die sogenannten regulären Ausdrücke,
;englisch „regular expressions“ oder kurz REGEX. Die Argumente Flags und Offset der PHP-Vorlage
;werden dabei noch nicht unterstützt. PregMatch prüft einen Text per Suchmuster auf Übereinstim-
;mungen und übernimmt diese in ein Feld. Enthält das Suchmuster einen Fehler, wird 0 zurückgegeben.
;Nicht vergessen: Die PCRE-Lizenz in den Quelltext kopieren!
Procedure PregMatch(Pattern$, String$, Array Output$(1))
  Protected RegEx, Count, i
  
  RegEx = CreateRegularExpression(#PB_Any, Pattern$)
  If RegEx
    If ExamineRegularExpression(RegEx, String$)
      NextRegularExpressionMatch(RegEx) ; genau 1x durchlaufen
      Count = CountRegularExpressionGroups(RegEx)
      ReDim Output$(Count - 1)
      For i = 1 To Count
        Output$(i - 1) = RegularExpressionGroup(RegEx, i)
      Next
    EndIf
    FreeRegularExpression(RegEx)
    ProcedureReturn Count - 1
  Else
    ProcedureReturn -1
  EndIf
EndProcedure
;}

;-Example
CompilerIf #PB_Compiler_IsMainFile
  Define i, c, Count
  
  Dim Teile$(3)
  Dim Auflosung$(0)
  
  Teile$(0) = "480x360"
  Teile$(1) = "640x480 [SAR 16:11]"
  Teile$(2) = "852x640 [DAR 320:121]"
  Teile$(3) = "1136x852 [SAR 16:11 DAR 320:121]"
  
  For i = 0 To 3
    Count = PregMatch("(\d+)x(\d+)[ ]*(\[(SAR \d+:\d+)?\s?(DAR \d+:\d+)?\])?", Teile$(i), Auflosung$())
    For c = 0 To Count
      Debug Str(i) + ": " + Auflosung$(c)
    Next
  Next
CompilerEndIf