Код:
; #FUNCTION# ====================================================================================================
; Name...........: _PathSplitByRegExp
; Description....: Splits the path to 5 elements.
; Syntax.........: _PathSplitByRegExp($sPath)
; Parameters.....: $sPath - Path to split.
;
; Return values..: Success - Array that contain 5 elements:
; [0] = Original path ($sPath)
; [1] = Drive
; [2] = Directory
; [3] = File name
; [4] = Extension
; Failure - Returns 0 and sets @error as following:
; 1 - $sPath is not a valid path (the path is not splitable).
; 2 - Array is invalid. No matches.
; 3 - [Should not happen] Bad pattern, array is invalid. @Extended = offset of error in pattern.
; Author.........: Gibbo, Mod. by G.Sandler a.k.a (Mr)CreatoR.
; Modified.......:
; Remarks .......: * The path can include backslash as well (exmp: C:/test/test.zip).
; * This function does not take a command line string. It works on paths, not paths with arguments.
; * This differs from _PathSplit in that the drive letter or servershare retains the "" not the path.
; * RegEx Built using examples from "Regular Expressions Cookbook (O’Reilly Media, 2009)"
; Related........:
; Link...........:
; Example........: Yes.
; ===============================================================================================================
Func _PathSplitByRegExp($sPath)
If StringStripWS($sPath, 8) = '' Then
Return SetError(1, 0, 0)
EndIf
$sPath = StringReplace($sPath, '/', '\')
Local $aRet = StringRegExp($sPath, '^(?i)([a-z]:|\\\\(?:\?\\)?[a-z0-9_.$]+\\[a-z0-9_.]+\$?)?(\\(?:[^\\/:*?"<>|\r\n]+\\)*)?([^\\/:*?"<>|\r\n.]*)\.?((?:[^.\\/:*?"<>|\r\n]+)?)$', 2)
Switch @error
Case 1
Return SetError(2, 0, 0) ;Array is invalid. No matches.
Case 2
Return SetError(3, @extended, 0) ;Bad pattern, array is invalid. @Extended = offset of error in pattern.
EndSwitch
Return $aRet
EndFunc ;==>_PathSplitByRegExp