- Offizieller Beitrag
Ich verwende häufiger Reguläre Ausdrücke. Um nicht jedes mal zum Testen auf ein externes Tool zugreifen zu müssen, habe ich diese Funktion erstellt, die die Ergebnisse (meist Arrays) gleich fertig zur Konsolenausgabe aufbereitet und mir im Fehlerfall den Fehlerwert auch gleich als Text ausgibt. Für den einfachen Check erscheint dann "MATCH!" oder "NO MATCHES" statt "1" oder "0". Ich bin da eher der "Text-Mensch"
Von den Parametern und erweiterten Rückgabewerten (@error, @extended) verhält sich die Funktion identisch zu StringRegExp.
Vielleicht ja auch für euch nützlich.
Code
; #FUNCTION# ====================================================================================================================
; Name ..........: _RegexTest
; Description ...: A covered StringRegExp function. In case of match check (flag 0) it returns '>> MATCH!' or '!> NO MATCHES'.
; Otherwise it returns the matches from the result array as string. One value in each line.
; Syntax ........: _RegexTest($_sTest, $_sPattern[, $_iFlag = 0])
; Parameters ....: $_sTest - The string to check.
; $_sPattern - The regular expression.
; $_iFlag - [optional] The flag to use with StringRegExp. Default is 0.
; $_iOffset - [optional] The string position to start the match. Default is 1.
; Return values .: Succes With flag 0: 'MATCH' or 'NO MATCHES', otherwise a string with all matches, one value in each line.
; Failure The occured error as text. Also the macros @error & @extended like filled from StringRegExp
; Author ........: BugFix
; ===============================================================================================================================
Func _RegexTest(ByRef $_sTest, $_sPattern, $_iFlag=0, $_iOffset=1)
Local $aResult = StringRegExp($_sTest, $_sPattern, $_iFlag, $_iOffset)
Local $iErr = @error, $iExt = @extended, $sErr = '!> REGEX-ERROR [Flag=' & $_iFlag & ']: '
If $iErr Then
Switch $_iFlag
Case 0
$sErr &= 'Bad Pattern'
Case Else
If $iErr = 1 Then
$sErr &= 'Array is invalid. No matches.'
Else
$sErr &= 'Bad pattern, array is invalid. Offset of error in pattern: ' & $iExt
EndIf
EndSwitch
Return SetError($iErr, $iExt, $sErr)
EndIf
Local $sReturn = ''
Switch $_iFlag
Case 0
$sReturn = $aResult ; 0 if no match
Case 1, 2, 3
For $i = 0 To UBound($aResult) -1
$sReturn &= $aResult[$i] & @LF
Next
Case 4
For $i = 0 To UBound($aResult) -1
For $j = 0 To UBound($aResult[$i]) -1
$sReturn &= ($aResult[$i])[$j] & @LF
Next
Next
EndSwitch
If $sReturn == 0 Then $sReturn = ''
Return SetError(0, $iExt, ($sReturn = '' ? '!> NO MATCHES' : ($sReturn = 1 ? '>> MATCH!' : $sReturn)))
EndFunc ;==>_RegexTest
Alles anzeigen