amel27,
Цитата:
в принципе то же самое, только у тебя для одного символа
|
Да нет вроде... (для этого там и плюсик ) - Я понял что ты имел в виду - если в качестве символа задана серия разных символов, то в моём случае только первое вхождение будет заменено...
Но и с ствоим методом есть небольшая проблема:
Код:
$Char = '\t'
$Char = StringRegExpReplace($Char, '([][{}()|.?+*\\^])', '\\\1')
$Ret = StringRegExpReplace("\\test", '(?i)^[' & $Char & ']+([^' & $Char & '])', '\1')
ConsoleWrite($Ret)
Т.е под символ
\ подставляется ещё один такой символ (для его отмены), и тогда неверно возвращается (должно в этом случае вернуться исходное значение - без изменении, так как в начале не найдено вхождение
\t).
Вот функция (для чего вообще мне и требовалось сия опция), позволяет стриппить (обножать) определённый(е) символ(ы):
Код:
;=======================================
;$Flag = 0 (или любое значение кроме 1,2, и 3) - обычная замена всех вхождении заданного символа
;$Flag = 1 - убирание заданного символа в начале $String
;$Flag = 2 - убирание заданного символа в конце $String
;$Flag = 3 - убирание заданного символа в начале и в конце $String
;
;$ReplaceAll = 0 (по умолчанию) - заменяется только первое вхождение заданного(ных) символа(ов)
;$ReplaceAll = 0 - заменяются все вхождения символов с заданой стороны (в зависимости от значения $Flag)
;=======================================
Func _StringStripChars($String, $Char, $Flag=0, $ReplaceAll=0)
If StringLen($String) = 0 Or Not StringInStr($String, $Char) Then Return SetError(1, 0, $String)
Local $Patern, $RetStr = $String
$Char = StringRegExpReplace($Char, '([][{}()|.?+*\\^])', '\\\1')
Switch $Flag
Case 1
$Patern = '(?i)\A' & $Char
If $ReplaceAll = 1 Then $Patern = '(?i)\A' & $Char & '+'
$RetStr = StringRegExpReplace($String, $Patern, '')
Return $RetStr
Case 2
$Patern = '(?i)' & $Char & '\z'
If $ReplaceAll = 1 Then $Patern = '(?i)' & $Char & '+\z'
$RetStr = StringRegExpReplace($String, $Patern, '')
Return $RetStr
Case 3
$Patern = '(?i)\A' & $Char & '|' & $Char & '\z'
If $ReplaceAll = 1 Then $Patern = '(?i)\A' & $Char & '+|' & $Char & '+\z'
$RetStr = StringRegExpReplace($String, $Patern, '')
Return $RetStr
Case Else
$String = StringReplace($String, $Char, '')
Return SetError(0, @extended, $String)
EndSwitch
Return SetError(2, 0, $String)
EndFunc
В этой функции хотелось бы реализовать ещё одну тему - чтобы в качестве $ReplaceAll можно было задать параметр для указания того, сколько символов следует убирать. Т.е если передать к примеру 3, тогда только три первых(/последних/с обоих сторон) символа (заданных через $Char) будут убираться, если же оставить этот параметр по умолчанию (0), то чтобы убирался только первый символ, для убирания всех начальных/конечных символов, задавать -1.
Это конечно можно сделать проверкой длины и т.п... но хотелось именно средствами RegExp...
Что-то я если честно запутался уже - где следует использовать функцию
_MyFSFCallbackProc(), а где
_FileSFCallbackProc()
Цитата:
у меня вроде без тормозов
|
Это при использовании флага
$BIF_BROWSEINCLUDEFILES? без него всё нормально.