繁体   English   中英

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

[英]What is the difference between regexp.Compile and regexp.CompilePOSIX?

任何人都可以提供一些例子来解释regexp.Compileregexp.CompilePOSIX之间的区别吗? 我看了文档。 但我无法得到直观的理解。

Perl和POSIX兼容的正则表达式在大部分中类似,但在某些关键方面有所不同,例如子匹配 这在这里提到:

POSIX定义要解析子匹配,首先选择在字符串中最左边开始的匹配。 (这是传统的Perl行为,但这里事情有所不同。)从字符串最左边位置开始的子匹配中,选择总体最长的子匹配。

假设你有一个正则表达式(foo|foobar) 将此表达式与匹配多个子表达式的字符串匹配时(例如, foobarbaz将匹配子模式, foofoobar ),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"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM