douyuan4357 2016-01-16 15:01
浏览 341
已采纳

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

Can anyone provide some examples to explain the differences between regexp.Compile and regexp.CompilePOSIX? I read the documentation. But I can't get an intuitive understanding.

  • 写回答

1条回答 默认 最新

  • duangangmo0583 2016-01-16 15:20
    关注

    Perl- and POSIX-compatible regular expressions are similar in large parts, but differ in some key aspects, like for example submatching. This is mentioned here:

    POSIX defines that to resolve submatches, first chose the match that starts leftmost in the string. (This is traditional Perl behavior but here things diverge.) Among the submatches starting at the leftmost position in the string, choose the longest one overall.

    Say you have a regular expression (foo|foobar). When matching this expression against a string that would match several of the subexpressions (for example, foobarbaz would match both subpatterns, foo and foobar), a Perl-compatible regex would return the first match (foo), while a POSIX-compatible regex would return the longest match (foobar).

    Some example code (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"
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序