Описание функции


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) + "|"