中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言中正則表達式的使用

發布時間:2020-07-17 01:22:06 來源:網絡 閱讀:721 作者:thao888 欄目:編程語言

許多程序語言都支持使用正則表達式對字符串進行操作,Go語言也不例外,正則表達式的語法網上很多教程,本文主要介紹在Go語言中如何使用正則表達式,通過以下實例進行說明,并添加了詳細的注釋,不會的小伙伴一看就明白了。

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

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

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

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

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

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

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

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

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

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

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

    // 子匹配,匹配從左邊開始的n個字符串,為-1時則匹配所有,返回一個記錄下標的二維int切片
    // 此處用于匹配str中所有郵箱地址及這些郵箱地址中的子串的下標
    findS7 := match.FindAllStringSubmatchIndex(str, -1)
    fmt.Printf("%T====%v\n", findS7, findS7)
    // 執行結果:[][]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切片作為參數和返回值
    // 此處用于匹配str中第一個郵箱地址,以byte切片作為參數和返回值
    findS8 := match.Find([]byte(str))
    fmt.Printf("%T====%v====%s\n", findS8, findS8, findS8)
    執行結果:[]uint8====[109 121 64 49 54 51 46 99 111 109]====my@163.com

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

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

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

    // 字符串替換,用byte切片,使用函數作替換參數
    // 此處用于將str中的郵箱地址全部替換為大寫字母,以byte切片為參數和返回值
    findS12 := match.ReplaceAllFunc([]byte(str), bytes.ToUpper)
    fmt.Printf("%T====%v====%s\n", findS12, findS12, findS12)
    // 執行結果:[]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的郵箱 你好中國 你好中國"中的所有漢字查詢出來
    match2 := regexp.MustCompile("\\p{Han}")
    findS13 := match2.FindAllString(findS11, -1)
    fmt.Printf("%T====%v\n", findS13, findS13)
    // 執行結果:[]string====[的 郵 箱 你 好 中 國 你 好 中 國]
}

func replace(str string) string {
    if strings.EqualFold(str, "my@163.com") {
        return "my的郵箱"
    }
    return "你好中國"
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永胜县| 巴楚县| 古丈县| 于都县| 通许县| 邳州市| 铁岭县| 吉林省| 盐山县| 九寨沟县| 大安市| 会同县| 衢州市| 卓尼县| 新丰县| 馆陶县| 安仁县| 新竹市| 灌云县| 东安县| 保靖县| 都江堰市| 灵寿县| 苏尼特左旗| 河津市| 乌拉特前旗| 花垣县| 济宁市| 泸州市| 莱西市| 双鸭山市| 开封县| 林口县| 汪清县| 乌兰浩特市| 彰武县| 武川县| 德州市| 西丰县| 商南县| 汝南县|