Creat0R
Цитата:
раньше делали отдельную RegExp обработку для замены »
|
ну как минимум одну замену сделать придется
Код:

$sArgument = "\Q"& StringReplace($sArgument,"\E","\E\\E\Q") &"\E"
Цитата:
Хочется перестраховаться »
|
по стандарту - строка парсится на CMD-параметры пробелами/кавычками, далее прога своими средствами сканирует массив CMD-параметров и решает что является параметром, что значением, что параметром со значением ("/A:F") а что является нарушением синтаксиса... тут ИМХО все как раз прозрачно
насколько я понял, ты хочешь заменить стандартные спецсимволы кавычки и пробела на свои - символы начала/конца блока параметра ("/-"), внутри которого имя параметра от его значения разделяется другими спецсимволами ("=: "), не будет ли это сменой "шила на мыло"

- указанные спецсимволы уже нельзя будет просто так указывать в значении параметров... например, придется брать в кавычки (вместо пробелов) ... заметь, что при этом пробел теряет свой статус и значение может включать несколько строк с экранирующими кавычками, т.е. обработку концевых символов придется проводить отдельно
Код:

If $CmdLine[0] = 0 Then $CmdLineRaw = '/Param=1 /Fil\e "C:\Program Files\Some App\File" - "Name.txt" /URL:"http://google.com"'
MsgBox(64, "", _
_GetCmdLine($CmdLineRaw, "Param") & @LF & _
_GetCmdLine($CmdLineRaw, "URL") & @LF & _
_GetCmdLine($CmdLineRaw, "Fil\e"))
Func _GetCmdLine($sCmdLine, $sArgument, $sParPrefix="/", $sValPrefix="=: ")
; Экранируем спецсимволы
$sParPrefix = StringRegExpReplace($sParPrefix, "[-^\]", "\\1")
$sValPrefix = StringRegExpReplace($sValPrefix, "[-^\]", "\\1")
$sArgument = "\Q"& StringReplace($sArgument,"\E","\E\\E\Q") &"\E"
#Region Построение регулярного выражения
Local $ExpandVarStrings = Opt("ExpandVarStrings", 1)
Local $sParClassIn = '[$sParPrefix$]' ; класс начала имени параметра
Local $sValClassIn = '[$sValPrefix$]' ; класс конца имени/начала значения
Local $sAllClassEx = '[^$sParPrefix$"]' ; класс обычных символов
Local $sRegExp = '(?i)^.*?$sParClassIn$$sArgument$(?:$sValClassIn$+((?:"[^"]*"|$sAllClassEx$+)+))?.*$'
ConsoleWrite($sRegExp &@CRLF)
Opt("ExpandVarStrings", $ExpandVarStrings)
#EndRegion
Local $sRetCmd = StringRegExpReplace($sCmdLine, $sRegExp, '\1')
If @extended Then Return $sRetCmd
Return SetError(1, 0, "NOT FOUND")
EndFunc