regexp.Compile和regexp.compilepOfix之间有什么区别?
有人能举一些例子来解释和之间的区别吗?我看了文件。但我无法直观地理解。与Perl和POSIX兼容的正则表达式在很大程度上相似,但在一些关键方面有所不同,例如子匹配。其中提到: POSIX定义,要解析子匹配,首先选择字符串中最左边开始的匹配。(这是传统的Perl行为,但在这里情况有所不同。)在从字符串最左边开始的子匹配中,选择最长的一个 假设您有一个正则表达式regexp.Compile和regexp.compilepOfix之间有什么区别?,regex,go,Regex,Go,有人能举一些例子来解释和之间的区别吗?我看了文件。但我无法直观地理解。与Perl和POSIX兼容的正则表达式在很大程度上相似,但在一些关键方面有所不同,例如子匹配。其中提到: POSIX定义,要解析子匹配,首先选择字符串中最左边开始的匹配。(这是传统的Perl行为,但在这里情况有所不同。)在从字符串最左边开始的子匹配中,选择最长的一个 假设您有一个正则表达式(foo | foobar)。当将此表达式与匹配多个子表达式的字符串进行匹配时(例如,foobarbaz将匹配两个子模式,foo和fooba
(foo | foobar)
。当将此表达式与匹配多个子表达式的字符串进行匹配时(例如,foobarbaz
将匹配两个子模式,foo
和foobar
),与Perl兼容的正则表达式将返回第一个匹配(foo
),而与POSIX兼容的正则表达式将返回最长匹配(foobar
)
一些示例代码():
查看文档,它听起来像是
编译使用了PCRE和其他POSIX;
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"
}