- Offizieller Beitrag
Es ging mir nicht mal um Optimierung, nur darum ob das die gleiche Wirkung hat.
Nicht ganz, kommt auf die vermutete Ausgangssituation an.
Annahme 1: Teststring beginnt mit Leerzeichen - Ja, dann ist die Wirkung identisch.
Annahme 2: Vor dem Laufwerksbuchstaben ist ein anderes als ein Leerzeichen - Dann funktioniert es nur mit dem Lookbehind.
Da ich alle Fehlersituationen berücksichtigen wollte, ist somit der Lookaround das Mittel der Wahl.
Hier mal zum Prüfen:
Test
Code
Global $sTestGood = 'C:\'
Global $sTestFalse = ' C:\'
Global $PattLookBehind = '(?<!.)([a-zA-Z]\:\\)'
Global $PattStartToken = '^([a-zA-Z]\:\\)'
ConsoleWrite('Test good string' & @CRLF)
ConsoleWrite('Lookbehind: ' & StringRegExp($sTestGood, $PattLookBehind, 1)[0] & @CRLF)
ConsoleWrite('StartToken: ' & StringRegExp($sTestGood, $PattStartToken, 1)[0] & @CRLF & @CRLF)
ConsoleWrite('Test false string' & @CRLF)
Global $aResult = StringRegExp($sTestFalse, $PattLookBehind, 1)
If Not IsArray($aResult) Then
ConsoleWrite('Lookbehind: NO MATCH - correct.' & @CRLF)
Else
ConsoleWrite('Lookbehind: ' & $aResult[0] & ' - wrong pattern!' & @CRLF)
EndIf
$aResult = StringRegExp($sTestFalse, $PattStartToken, 1)
If Not IsArray($aResult) Then
ConsoleWrite('StartToken: NO MATCH - correct.' & @CRLF)
Else
ConsoleWrite('StartToken: ' & $aResult[0] & ' - wrong pattern!' & @CRLF)
EndIf
Alles anzeigen