I have an array of characters like this :
chars := []string{".", "-", "(", ")"}
When I join them in regular way (strings.Join(chars, "")
) and pass it to regexp.MustCompile
, Its panic :
panic: regexp: Compile(`[.-()]`): error parsing regexp: invalid character class range: `.-(`
How can I scape string special characters for use in golang regexp as a character not regexp operator?
You must put the -
item at the start/end of the array so that -
appears either at the start - [-.()]
- or end - [.()-]
- of the character class.
Or escape the -
in the chars
array: "\\-"
.
NOTE: That is not the only caveat, the ^
and ]
must also be escaped, or placed in a specific location in the character class. The \
must be escaped always.
See a 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)
}
Output: Somestring
Note that the ^
must not be the first item, ]
must be at the start and -
at the end.