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