Go Regexp:理解任意字符匹配
Go re2 语法文档指出任意字符 (.) 匹配任意字符,包括换行符当“s”标志被设置时。然而,最近的查询引起了担忧,因为测试程序似乎表明情况并非如此。
程序结果意外
提供的程序(http://play.golang.org /p/pccP52RvKS) 旨在匹配所有字符,包括换行符,但其结果表明任何字符都不匹配换行符。
解决差异
与许多其他字符一样正则表达式引擎,Go 的 re2 不匹配带有“.”的换行符。默认为元字符。要启用换行符匹配,必须将“?s”(点全)标志添加到正则表达式中。
带有“?s”标志的示例
修改版本包含“?s”标志的测试程序的示例:
<code class="go">package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile("(?s).+") match := re.FindString("abc\ndef") fmt.Println(match) }</code>
执行时,该程序正确打印“abcndef”,表明任何字符现在都按预期匹配换行符。
结论
Go 的 re2 语法中,“.”元字符本质上并不匹配换行符。要启用换行符匹配,必须将“?s”标志添加到正则表达式中。通过合并此标志,用户可以确保与 re2 语法文档保持一致的准确匹配行为。
以上是Go Regexp 的'.”是否匹配换行符?任何字符匹配的意外行为。的详细内容。更多信息请关注PHP中文网其他相关文章!