golang regexp記錄

來源:互聯網
上載者:User
  1. FindAllSubmatch與FindSubmatch區別
  // 匹配一個非母音字母,一個母音字母,一個非母音字母    someRegex, _ := regexp.Compile(`[^aouiye]([aouiye])([^aouiye])?`)    m1 := someRegex.FindAllStringSubmatch("somestri", -1)    m2 := someRegex.FindStringSubmatch("somestri")    fmt.Println(m1)    fmt.Println(m2)    //result:    [[som o m] [ri i ]]    [som o m]    re2, _ := regexp.Compile("am(.*)lang(.*)")    //尋找Submatch,返回數組,第一個元素是匹配的全部元素,第二個元素是第一個()裡面的,第三個是第二個()裡面的    //下面的輸出第一個元素是"am learning Go language"    //第二個元素是" learning Go ",注意包含空格的輸出    //第三個元素是"uage"    submatch := re2.FindSubmatch([]byte(a))    fmt.Println("FindSubmatch", submatch)    for _, v := range submatch {        fmt.Println(string(v))    }    //定義和上面的FindIndex一樣    submatchindex := re2.FindSubmatchIndex([]byte(a))    fmt.Println("submatchindex:",submatchindex)    //FindAllSubmatchIndex,尋找所有字匹配的index    submatchallindex := re2.FindAllSubmatchIndex([]byte(a), -1)    fmt.Println("submatchallindex:",submatchallindex)    //FindAllSubmatch,尋找所有合格子匹配    submatchall := re2.FindAllSubmatch([]byte(a), -1)    fmt.Println("submatchall:",submatchall)    //result  submatchindex: [2 25 4 17 21 25]  submatchallindex: [[2 25 4 17 21 25]]  submatchall: [[[97 109 32 108 101 97 114 110 105 110 103 32 71 111 32 108 97 110 103 117 97 103 101] [32 108 101 97 114 110 105 110 103 32 71 111 32] [117 97 103 101]]]
  1. 貪婪與非貪婪
  s := "圖片(img=32,34)http://www.xiong.com/jpg(/img)圖片(img=32,34)http://www.xiong.com/jpg(/img)"    //非貪婪模式    parse,_ := regexp.Compile("\\(.*?\\)")    fmt.Println(parse.MatchString(s))    fmt.Println(parse.FindString(s))    fmt.Println(parse.ReplaceAllString(s,"+"))    //result    true    (img=32,34) //最左最短匹配    圖片+http://www.xiong.com/jpg+圖片+http://www.xiong.com/jpg+    //貪婪模式    parse,_ := regexp.Compile("\\(.*\\)")    fmt.Println(parse.MatchString(s))    fmt.Println(parse.FindString(s))    fmt.Println(parse.ReplaceAllString(s,"+"))    //result    true  (img=32,34)http://www.xiong.com/jpg(/img)圖片(img=32,34)http://www.xiong.com/jpg(/img)  圖片+
  1. find vs findAll
  a := "I am learning Go language"    re, _ := regexp.Compile("[a-z]{2,4}")    //尋找符合正則的第一個    one := re.Find([]byte(a))    fmt.Println("Find:", string(one))    //尋找符合正則的所有slice,n小於0表示返回全部符合的字串,不然就是返回指定的長度    all := re.FindAll([]byte(a), -1)    fmt.Print("FindAll:")    for i:= 0; i < len(all); i++{        fmt.Print(string(all[i])+",")    }    //尋找合格index位置,開始位置和結束位置    index := re.FindIndex([]byte(a))    fmt.Println("FindIndex", index)    //尋找合格所有的index位置,n同上    allindex := re.FindAllIndex([]byte(a), -1)    fmt.Println("FindAllIndex", allindex)    //result  Find: am  FindAll:am,lear,ning,lang,uage  FindIndex [2 4]  FindAllIndex [[2 4] [5 9] [9 13] [17 21] [21 25]]
  1. capture group

    var myExp = regexp.MustCompile(`(?P<first>\d+)\.(\d+).(?P<second>\d+)`)fmt.Printf("%+v\n", myExp.FindAllStringSubmatch("1234.5678.9",-1))fmt.Printf("%+v", myExp.FindStringSubmatch("1234.5678.9"))//result[[1234.5678.9 1234 5678 9]][1234.5678.9 1234 5678 9]
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.