debuggoCritical
"Unknown escape sequence" error in Go
Viewed 0 times
errorescapesequenceunknown
Problem
I have the following function written in Go. The idea is the function has a string passed to it and returns the first IPv4 IP address found. If no IP address is found, an empty string is returned.
The compile-time error I'm getting is
unknown escape sequence: .
How can I tell Go that the
func parseIp(checkIpBody string) string {
reg, err := regexp.Compile("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")
if err == nil {
return ""
}
return reg.FindString(checkIpBody)
}The compile-time error I'm getting is
unknown escape sequence: .
How can I tell Go that the
'.' is the actual character I'm looking for? I thought escaping it would do the trick, but apparently I'm wrong.Solution
The
A string quoted with
Go has another alternative which can be useful when writing string literals for regular expressions: a "raw string literal" is quoted by ``
`
These are described in the "String literals" section of the Go spec.
\ backslash isn't being interpreted by the regex parser, it's being interpreted in the string literal. You should escape the backslash again:regexp.Compile("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")
A string quoted with
" double-quote characters is known as an "interpreted string literal" in Go. Interpreted string literals are like string literals in most languages: \ backslash characters aren't included literally, they're used to give special meaning to the next character. The source must include \\ two backslashes in a row to obtain an a single backslash character in the parsed value.Go has another alternative which can be useful when writing string literals for regular expressions: a "raw string literal" is quoted by ``
backtick characters. There are no special characters in a raw string literal, so as long as your pattern doesn't include a backtick you can use this syntax without escaping anything:
regexp.Compile([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)`
These are described in the "String literals" section of the Go spec.
Context
Stack Overflow Q#6770898, score: 191
Revisions (0)
No revisions yet.