Go語(yǔ)言中正則表達(dá)式的使用

許多程序語(yǔ)言都支持使用正則表達(dá)式對(duì)字符串進(jìn)行操作,Go語(yǔ)言也不例外,正則表達(dá)式的語(yǔ)法網(wǎng)上很多教程,本文主要介紹在Go語(yǔ)言中如何使用正則表達(dá)式,通過(guò)以下實(shí)例進(jìn)行說(shuō)明,并添加了詳細(xì)的注釋,不會(huì)的小伙伴一看就明白了。

創(chuàng)新互聯(lián)從2013年成立,先為容城等服務(wù)建站,容城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為容城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

func main() {
    // 要操作的字符串
    str := "abcde 1234 my@163.com 386832092@qq.com admin@hotmail.com"

    // 正則表達(dá)式字符串----用于匹配郵箱地址,來(lái)源于網(wǎng)絡(luò)
    regexStr := "([A-Za-z0-9\u4e00-\u9fa5]+)@([a-zA-Z0-9_-]+)(\\.[a-zA-Z0-9_-]+)+"

    // 定義正則表達(dá)式
    match := regexp.MustCompile(regexStr)
    // 或者
    //match,err := regexp.Compile(regexStr)
    // 或者
    //match := regexp.MustCompile(regexStr)

    // 判斷是否存在正則表達(dá)式匹配的字符串========方法1
    // 此處用于判斷str中是否存在郵箱地址
    isExist := match.MatchString(str)
    fmt.Println(isExist)
    // 執(zhí)行結(jié)果:true

    // 判斷是否存在正則表達(dá)式匹配的字符串========方法2
    // 此處用于判斷"8888888888"中是否存在郵箱地址
    isExist1, _ := regexp.MatchString(regexStr, "8888888888")
    fmt.Println(isExist1)
    // 執(zhí)行結(jié)果:false

    // 查詢左邊第一次匹配的字符串
    // 此處用于查詢str中左邊第一個(gè)郵箱地址
    findS1 := match.FindString(str)
    fmt.Println(findS1)
    // 執(zhí)行結(jié)果:my@163.com

    // 查詢從左邊開始匹配的n個(gè)字符串,為-1時(shí),則全部匹配,返回是一個(gè)string切片
    // 此處用于查詢str中左邊開始2個(gè)郵箱地址
    findS2 := match.FindAllString(str, 2)
    fmt.Printf("%T====%v\n", findS2, findS2)
    // 執(zhí)行結(jié)果:[]string====[my@163.com 386832092@qq.com]

    // 查詢從左邊開始匹配的第一個(gè)字符串,返回的是下標(biāo),是一個(gè)int切片
    // 此處用于查詢str中左邊第一個(gè)郵箱地址在str中的下標(biāo)
    findS3 := match.FindStringIndex(str)
    fmt.Printf("%T====%v\n", findS3, findS3)
    // 執(zhí)行結(jié)果:[]int====[11 21]
    fmt.Println(str[findS3[0] : findS3[1]])
    // 執(zhí)行結(jié)果:my@163.com

    // 子匹配,只匹配從左邊開始的第一個(gè)字符串,在正則表達(dá)式中每一個(gè)小括號(hào)里的內(nèi)容為一個(gè)子串,返回一個(gè)string切片
    // 此處用于匹配str中左邊第一個(gè)郵箱地址,并匹配第一個(gè)郵箱地址中的子串
    findS4 := match.FindStringSubmatch(str)
    fmt.Printf("%T====%v\n", findS4, findS4)
    // 執(zhí)行結(jié)果:[]string====[my@163.com my 163 .com]
    // 其中my和163及.com都是子串

    // 子匹配,只匹配從左邊開始的第一個(gè)字符串,返回一個(gè)記錄下標(biāo)的int切片
    // 此處用于匹配str中左邊第一個(gè)郵箱及其子串的下標(biāo)
    findS5 := match.FindStringSubmatchIndex(str)
    fmt.Printf("%T====%v\n", findS5, findS5)
    // 執(zhí)行結(jié)果:[]int====[11 21 11 13 14 17 17 21]
    // 其中11 21是my@163.com的下標(biāo),11 13是my的下標(biāo),14 17是163的下標(biāo),17 21是.com的下標(biāo)

    // 子匹配,匹配從左邊開始的n個(gè)字符串,為-1時(shí)則匹配所有,返回一個(gè)二維string切片
    // 此處用于匹配str中所有郵箱地址,及這些郵箱地址中的子串
    findS6 := match.FindAllStringSubmatch(str, -1)
    fmt.Printf("%T====%v\n", findS6, findS6)
    // 執(zhí)行結(jié)果:[][]string====[[my@163.com my 163 .com] [386832092@qq.com 386832092 qq .com] [admin@hotmail.com admin hotmail .com]]

    // 子匹配,匹配從左邊開始的n個(gè)字符串,為-1時(shí)則匹配所有,返回一個(gè)記錄下標(biāo)的二維int切片
    // 此處用于匹配str中所有郵箱地址及這些郵箱地址中的子串的下標(biāo)
    findS7 := match.FindAllStringSubmatchIndex(str, -1)
    fmt.Printf("%T====%v\n", findS7, findS7)
    // 執(zhí)行結(jié)果:[][]int====[[11 21 11 13 14 17 17 21] [22 38 22 31 32 34 34 38] [39 56 39 44 45 52 52 56]]

    // 使用byte切片作為參數(shù)和返回值
    // 此處用于匹配str中第一個(gè)郵箱地址,以byte切片作為參數(shù)和返回值
    findS8 := match.Find([]byte(str))
    fmt.Printf("%T====%v====%s\n", findS8, findS8, findS8)
    執(zhí)行結(jié)果:[]uint8====[109 121 64 49 54 51 46 99 111 109]====my@163.com

  // 使用byte切片作為參數(shù),判斷是否有匹配的字符串
    // 此處用于判斷str中是否存在郵箱地址,以byte切片為參數(shù)
    findS9 := match.Match([]byte(str))
    fmt.Printf("%T====%v\n", findS9, findS9)
    // 執(zhí)行結(jié)果:bool====true

    // 字符串替換,返回替換后的字符串
    // 此處用于將str中所有郵箱地址替換為"<email>"
    findS10 := match.ReplaceAllString(str, "<email>")
    fmt.Printf("%T====%v\n", findS10, findS10)
    // 執(zhí)行結(jié)果:string====abcde 1234 <email> <email> <email>

    // 字符串替換,使用函數(shù)作為替換參數(shù)
    // 此處用于將str中的所有郵箱地址替換為下面replace的返回值
    findS11 := match.ReplaceAllStringFunc(str, replace)
    fmt.Printf("%T====%v\n", findS11, findS11)
    // 執(zhí)行結(jié)果:string====abcde 1234 my的郵箱 你好中國(guó) 你好中國(guó)

    // 字符串替換,用byte切片,使用函數(shù)作替換參數(shù)
    // 此處用于將str中的郵箱地址全部替換為大寫字母,以byte切片為參數(shù)和返回值
    findS12 := match.ReplaceAllFunc([]byte(str), bytes.ToUpper)
    fmt.Printf("%T====%v====%s\n", findS12, findS12, findS12)
    // 執(zhí)行結(jié)果:[]uint8====[97 98 99 100 101 32 49 50 51 52 32 77 89 64 49 54 51 46 67 79 77 32 51 56 54 56 51 50 48 57 50 64 81 81 46 67 79 77 32 65 68 77 73 78 64 72 79 84 77 65 73 76 46 67 79 77]====abcde 1234 MY@163.COM 386832092@QQ.COM ADMIN@HOTMAIL.COM

    // \p{Unicode腳本類名}  Unicode類 (腳本類)    Han----中文
    // 此處用于將上面"abcde 1234 my的郵箱 你好中國(guó) 你好中國(guó)"中的所有漢字查詢出來(lái)
    match2 := regexp.MustCompile("\\p{Han}")
    findS13 := match2.FindAllString(findS11, -1)
    fmt.Printf("%T====%v\n", findS13, findS13)
    // 執(zhí)行結(jié)果:[]string====[的 郵 箱 你 好 中 國(guó) 你 好 中 國(guó)]
}

func replace(str string) string {
    if strings.EqualFold(str, "my@163.com") {
        return "my的郵箱"
    }
    return "你好中國(guó)"
}

分享題目:Go語(yǔ)言中正則表達(dá)式的使用
分享鏈接:http://www.muchs.cn/article18/ishigp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、品牌網(wǎng)站制作、營(yíng)銷型網(wǎng)站建設(shè)、App設(shè)計(jì)、網(wǎng)站營(yíng)銷網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化