亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 332 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號