为了账号安全,请及时绑定邮箱和手机立即绑定

regexp.Compile 和 regexp.CompilePOSIX 有什么区别?

regexp.Compile 和 regexp.CompilePOSIX 有什么区别?

Go
收到一只叮咚 2021-12-07 10:43:06
任何人都可以提供一些例子来解释之间的差异regexp.Compile和regexp.CompilePOSIX?我阅读了文档。但我无法得到一个直观的理解。
查看完整描述

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"

}


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 297 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信