我有一个像这样的字符数组:
chars := []string{".", "-", "(", ")"}
当我以常规方式(strings.Join(chars, "")
)加入它们并将其传递给regexp.MustCompile
时,它的恐慌:
panic: regexp: Compile(`[.-()]`): error parsing regexp: invalid character class range: `.-(`
如何在golang regexp中使用字符串特殊字符作为字符而不是regexp运算符?
答案 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
请注意,^
不能是第一项,]
必须位于开头且-
位于最后。