Описание функции
EscapeRegularExpression
Экранирует метасимволы регулярного выражения.
EscapeRegularExpression(String$[, Separator$ = "[][{}()*+?.\\^$|=<>#]"])
Параметры
String$ | Строка, которую необходимо экранировать |
Separator.s |
Строка метасимволов. |
Возвращаемое значение
Возвращает экранированную строку |
Примечания
Также для экранирования можно использовать регулярное выражение, но требуется функция с поддержкой групп в тексте замены.Пример
; AZJIO
; https://www.purebasic.fr/english/viewtopic.php?p=617999#p617999
EnableExplicit
Procedure ListToString(*Result.string, List StrList.s())
Protected Len, *Point
ForEach StrList()
Len + Len(StrList())
Next
*Result\s = Space(Len)
*Point = @*Result\s
ForEach StrList()
CopyMemoryString(StrList(), @*Point)
Next
EndProcedure
Procedure.s EscapeRegularExpression(String$, Separator$ = "[][{}()*+?.\\^$|=<>#]")
Protected NewList StringList.s(), *S = @String$
Protected *jc.Character, *c.Character = @String$
Protected Result.String
While *c\c
*jc = @Separator$
While *jc\c
If *c\c = *jc\c
*c\c = 0
AddElement(StringList())
If *S <> *c
StringList() = PeekS(*S)
AddElement(StringList())
EndIf
StringList() = "\" + Chr(*jc\c)
*S = *c + SizeOf(Character)
Break
EndIf
*jc + SizeOf(Character)
Wend
*c + SizeOf(Character)
Wend
AddElement(StringList())
StringList() = PeekS(*S)
ListToString(@Result, StringList())
ProcedureReturn Result\s
EndProcedure
Define S.s = "This is [a] test$$$ string {to see if split (and join) are working}."
Debug "|" + S + "|"
Debug "|" + EscapeRegularExpression(S) + "|"