Go Regexp: Understanding Any Character Match
Go re2 语法文档指出任意字符 (.) 匹配任意字符,包括换行符当“s”标志被设置时。然而,最近的一个查询引起了人们的担忧,因为测试程序似乎表明情况并非如此。
程序结果意外
提供的程序(http://play.golang.org /p/pccP52RvKS) 旨在匹配所有字符,包括换行符,但其结果表明任何字符都不匹配换行符。
解决差异
像许多其他一样正则表达式引擎,Go 的 re2 不匹配带有“.”的换行符。默认为元字符。要启用换行符匹配,必须将“?s”(点全)标志添加到正则表达式中。
带有“?s”标志的示例
修改版本包含“?s”标志的测试程序:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(?s). ")
match := re.FindString("abc\ndef")
fmt.Println(match)
}
执行时,该程序正确打印“abc\ndef”,表明任意字符现在按预期匹配换行符。
结论
在 Go 的 re2 语法中,“.”元字符本质上并不匹配换行符。要启用换行符匹配,必须将“?s”标志添加到正则表达式中。通过合并此标志,用户可以确保与 re2 语法文档保持一致的准确匹配行为。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3