- Offizieller Beitrag
Wer mit SQL arbeitet kennt LIKE, um maskiert zu suchen.
In AutoIt können wir das mit RegEx erledigen. Da damit doch so mancher seine Probleme hat, habe ich die Syntax von LIKE verwendet ('_' =Platzhalter für ein beliebiges Zeichen an dieser Stelle; % =Platzhalter für eine beliebige Zahl von Zeichen, auch 0) und setze das intern in eine Regex-Prüfung um.
Im Unterschied zu LIKE, das immer case-sensitiv ist, kann hier die Sensitivität gewählt werden. Standard ist False.
Edit3:
Erweiterung:
Der zu prüfende String kann jetzt auch Zeilenumbrüche (@CR oder @CRLF) enthalten.
Edit2:
War noch ein Fehler drin beim An-/Abschalten der Metacharacter Erkennung.
Edit:
Habe progandys Hinweis jetzt eingearbeitet.
_Search_LIKE( )
Local $aTest[5] = [60123,62345,54175,62340,'C:\Code\Test.au3']
For $i = 0 To 4
If _Search_LIKE($aTest[$i], '6%') Then ConsoleWrite('erste Position eine 6 - ' & $aTest[$i] & @CRLF)
If _Search_LIKE($aTest[$i], '6%0') Then ConsoleWrite('erste Position eine 6, letzte eine 0 - ' & $aTest[$i] & @CRLF)
If _Search_LIKE($aTest[$i], '__1%') Then ConsoleWrite('dritte Position eine 1 - ' & $aTest[$i] & @CRLF)
If _Search_LIKE($aTest[$i], '__3%') Then ConsoleWrite('dritte Position eine 3 - ' & $aTest[$i] & @CRLF)
If _Search_LIKE($aTest[$i], '%test.au3') Then ConsoleWrite('test.au3 im Pfad - ' & $aTest[$i] & @CRLF)
ConsoleWrite(@CRLF)
Next
;===============================================================================
; Function Name: _Search_LIKE($sTest, $sMask, $fCasesens=False)
; Description: Prüft String auf Übereinstimmung mit Suchmaske
; Parameter(s): $sTest - der zu prüfende String
; Requirement(s): $sMask - die Suchmaske, analog zu LIKE in SQL
; _ =Platzhalter f. EIN beliebiges Zeichen an dieser Stelle,
; % =Platzhalter f. eine beliebige Menge von Zeichen
; $Casesense - False (Standard), nicht case-sensitiv
; Return Value(s): 1 - Übereinstimmung mit Suchmaske
; 0 - keine Übereinstimmung
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _Search_LIKE($sTest, $sMask, $fCasesens=False)
Local $pattern = '^'
If Not $fCasesens Then $pattern &= '(?i)'
$pattern &= '\Q' & StringRegExpReplace($sMask, '\\E', '\\E\\\\E\\Q')
$pattern = StringRegExpReplace(StringRegExpReplace($pattern, '%', '\\E.*\\Q'), '_', '\\E.\\Q') & '\E\z'
$sTest = StringRegExpReplace($sTest, '\r\n|\r', ' ')
Return StringRegExp($sTest, $pattern)
EndFunc ;==>_Search_LIKE