Go 正则表达式:点字符和换行符匹配
Go re2 语法文档指出点字符 (.) 匹配任何字符,包括当启用“单行”模式时换行。然而,一个简单的程序显示点字符默认不匹配换行符。
程序:
<code class="go">package main import ( "fmt" "regexp" ) func main() { text := "foo\nbar\nbaz" pattern := `foo.*bar` matched, err := regexp.MatchString(pattern, text) if err != nil { fmt.Println(err) return } fmt.Println(matched) }</code>
结果:
false
输出显示模式与文本不匹配,即使文本包含由换行符分隔的“foo”和“bar”。
原因
与许多其他正则表达式引擎一样, Go 中的点字符默认不匹配换行符。要启用换行符匹配,必须将“dot all”标志 (?s) 添加到正则表达式中:
<code class="go">pattern := `foo.*?sbar`</code>
启用“dot all”标志后,正则表达式将按预期匹配文本:
true
因此,要在 Go 正则表达式中匹配任何字符(包括换行符),必须使用“dot all”标志 (?s)。
以上是为什么 Go Regex 的点字符默认不匹配换行符?的详细内容。更多信息请关注PHP中文网其他相关文章!