Creat0R
Цитата:
Странно, а чем отличается "-" от "/" ? »
|
упс, в скрипте была ошибка - в строках экранирования спецсимволов
Цитата:
А что если придерживаться условию, что все параметры будут иметь какой-то один разделитель? »
|
на коде это не отразится, хотя надежности прибавит - в параметре нужно передать только один символ
Цитата Creat0R:
$sParPrefix при этом равен "-". Но опять же, имя файл в таком случае обрубается »
|
изменил поиск следующего параметра по комбинации "пробел+префикс+символ"... НО если "-" будет без следующего пробела, то текст опять "обрубится" - в этом случае слово после "-" будет абсолютно неотличимо от параметра, единственный выход - брать этот текст в кавычки, заметь - это ограничение заложено тобой в постановку задачи
Цитата Creat0R:
Теперь что получается, нужно почти при каждом использовании RegExp, применять метод отмены спец. символов (\Q...\E)? »
|
это я для примера, в твоем случае это лишнее (в имени параметра спецсимволов "\" не бывает), \Q...\E можно тоже убрать
Код:

If $CmdLine[0] = 0 Then $CmdLineRaw = '-Param=1 -XXX -File=C:\Program Files\Some App\File - Name.txt -URL=http://google.com'
MsgBox(64, "", _
"Param: "& @TAB & _GetCmdLine($CmdLineRaw, "Param","-","=") & @LF & _
"XXX: " & @TAB & _GetCmdLine($CmdLineRaw, "XXX", "-","=") & @LF & _
"YYY: " & @TAB & _GetCmdLine($CmdLineRaw, "YYY", "-","=") & @LF & _
"URL: " & @TAB & _GetCmdLine($CmdLineRaw, "URL", "-","=") & @LF & _
"File: " & @TAB & _GetCmdLine($CmdLineRaw, "File", "-","="))
Func _GetCmdLine($sCmdLine, $sArg, $sPar="/", $sVal="=:")
$sPar = "["& StringRegExpReplace ($sPar, "([-^\\])", "\\\1") & "]"
$sVal = "["& StringRegExpReplace ($sVal, "([-^\\])", "\\\1") &" ]"
$sArg = "\Q"& $sArg &"\E"
Local $sRegExp = '(?i)^(?:|.*?\s)'&$sPar&$sArg&$sVal&'+(?:$|'&$sPar&'|((?:"[^"]*"|[^"])+?)(?:$|\s'&$sPar&'\w)).*'
Local $sRetCmd = StringRegExpReplace($sCmdLine, $sRegExp, '\1')
If @extended Then Return $sRetCmd
Return SetError(1, 0, "=NOT FOUND=")
EndFunc