转义字符串特殊字符,用于golang regexp

Dar*_*asi 5 regex string go

我有一个像这样的字符数组:

chars := []string{".", "-", "(", ")"}
Run Code Online (Sandbox Code Playgroud)

当我以常规方式(strings.Join(chars, ""))将它们加入并传递给它时regexp.MustCompile,它的恐慌:

panic: regexp: Compile(`[.-()]`): error parsing regexp: invalid character class range: `.-(`
Run Code Online (Sandbox Code Playgroud)

如何在golang regexp中使用字符串特殊字符作为字符而非regexp运算符?

Wik*_*żew 6

您必须将-项目放在数组的开头/结尾,以便-显示在字符类的开头[-.()]- 或结尾 - [.()-].

或者-chars数组中转义:"\\-".

:这不是唯一的条件,则^]也必须进行转义,或放置在字符类的特定位置.在\必须始终逃脱.

查看Go演示:

package main

import (
    "fmt"
    "strings"
    "regexp"
)

func main() {
    chars := []string{"]", "^", "\\\\", "[", ".", "(", ")", "-"}
    r := strings.Join(chars, "")
    s := "[Some]-\\(string)^."
    re := regexp.MustCompile("[" + r + "]+")
    s = re.ReplaceAllString(s, "")
    fmt.Println(s)
}
Run Code Online (Sandbox Code Playgroud)

输出: Somestring

请注意,^必须不是第一项,]必须在开头和-结尾.