1 回答
TA贡献1804条经验 获得超3个赞
Perl 和 POSIX 兼容的正则表达式在很大程度上是相似的,但在一些关键方面有所不同,例如submatching。这是在这里提到的:
POSIX 定义要解析子匹配,首先选择字符串中最左边开始的匹配。(这是传统的 Perl 行为,但这里的情况有所不同。)在从字符串最左边位置开始的子匹配中,选择总体上最长的一个。
假设您有一个正则表达式(foo|foobar)。当将此表达式与匹配多个子表达式的字符串匹配时(例如,foobarbaz匹配两个子模式foo和foobar),Perl 兼容的正则表达式将返回第一个匹配项( foo),而 POSIX 兼容的正则表达式将返回最长的匹配( foobar).
一些示例代码(操场):
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"
}
- 1 回答
- 0 关注
- 297 浏览
添加回答
举报