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

时间:2016-12-23 10:20:41

标签: regex string go

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

chars := []string{".", "-", "(", ")"}

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

panic: regexp: Compile(`[.-()]`): error parsing regexp: invalid character class range: `.-(`

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

1 个答案:

答案 0 :(得分:5)

您必须将-项放在数组的开头/结尾,以便-出现在开头 - [-.()] - 或结束 - [.()-] - 角色类。

或转义-数组中的chars"\\-"

注意:这不是唯一的警告,^]也必须转义,或放置在角色类的特定位置。必须始终转义\

查看Go demo

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)
}

输出:Somestring

请注意,^不能是第一项,]必须位于开头且-位于最后。