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?
To insert escape characters, use interpreted string literals delimited by double quotes. The escape character \t denotes a horizontal tab and \n is a line feed or newline.
The backslash in a regular expression precedes a literal character. You also escape certain letters that represent common character classes, such as \w for a word character or \s for a space.
It indicates that the subpattern is a non-capture subpattern. That means whatever is matched in (?:\w+\s) , even though it's enclosed by () it won't appear in the list of matches, only (\w+) will.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With