任何人都可以提供一些例子来解释之间的差异regexp.Compile和regexp.CompilePOSIX?我看了文档.但我无法得到直观的理解.
Perl和POSIX兼容的正则表达式在大部分中类似,但在某些关键方面有所不同,例如子匹配.这在这里提到:
POSIX定义要解析子匹配,首先选择在字符串中最左边开始的匹配.(这是传统的Perl行为,但这里事情有所不同.)从字符串最左边位置开始的子匹配中,选择总体最长的子匹配.
假设你有一个正则表达式(foo|foobar).将此表达式与匹配多个子表达式的字符串匹配时(例如,foobarbaz将匹配两个子模式,foo并且foobar),Perl兼容的正则表达式将返回第一个匹配项(foo),而POSIX兼容的正则表达式将返回最长匹配项(foobar).
一些示例代码(playground):
package main
import "fmt"
import "regexp"
func main() {
pattern := "(foo|foobar)"
str := []byte("foobarbaz")
rPCRE, _ := regexp.Compile(pattern)
rPOSIX, _ := regexp.CompilePOSIX(pattern)
matchesPCRE := rPCRE.Find(str)
fmt.Println(string(matchesPCRE))
// prints "foo"
matchesPOSIX := rPOSIX.Find(str)
fmt.Println(string(matchesPOSIX))
// prints "foobar"
}
Run Code Online (Sandbox Code Playgroud)