Home >Backend Development >Golang >Why Doesn\'t Go\'s Regex `.` Match Newlines Even When `s` is Set to True?
Go Regexp vs. Newline: A Subtle Distinction
Despite Go's re2 syntax documentation stating that the any character (.) matches any character, including newlines when 's' is set to true, a simple program reveals that this is not the case.
Program Output
s set to true not matched s set to false matched
Explanation
Like many other regex engines, the dot character (.) only matches regular characters. To include newlines in the match, the "dot all" flag (?s) must be added to the regex.
Example
<code class="go">import ( "fmt" "regexp" ) func main() { const text = "This is a test.\nAnd this is another line." // Without the "dot all" flag, newline is not matched. r1 := regexp.MustCompile(".+") fmt.Printf("s set to true\n") if !r1.MatchString(text) { fmt.Println("not matched") } // With the "dot all" flag, newline is matched. r2 := regexp.MustCompile("(?s).+") fmt.Printf("s set to false\n") if r2.MatchString(text) { fmt.Println("matched") } }</code>
Output
s set to true not matched s set to false matched
Therefore, to match newlines with Go regexp, it is essential to include the "dot all" flag (?s) in the regex pattern.
The above is the detailed content of Why Doesn\'t Go\'s Regex `.` Match Newlines Even When `s` is Set to True?. For more information, please follow other related articles on the PHP Chinese website!