最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中正則表達(dá)式語法及相關(guān)示例

 更新時(shí)間:2024年05月13日 10:05:33   作者:grb123  
正則表達(dá)式是一種用于匹配和操作文本的強(qiáng)大工具,它使用特殊的字符和語法來定義模式,下面這篇文章主要給大家介紹了關(guān)于Golang中正則表達(dá)式語法及相關(guān)示例的相關(guān)資料,需要的朋友可以參考下

1. Golang中的正則表達(dá)式包

Golang提供了內(nèi)置的regexp包,用于處理正則表達(dá)式操作。該包提供正則表達(dá)式對(duì)象,可以執(zhí)行各種文本操作,如匹配、查找和替換。

Golang中的regexp包提供了一組函數(shù)和類型,用于處理正則表達(dá)式。以下是一些常用的函數(shù):

  • regexp.Compile : 編譯正則表達(dá)式,返回正則對(duì)象。
  • regexp.Match : 判斷文本是否與正則表達(dá)式匹配。
  • regexp.FindString : 查找并返回第一個(gè)匹配的字符串。
  • regexp.FindAllString : 查找并返回所有匹配的字符串。
  • regexp.ReplaceAllString : 替換所有匹配的字符串。

2. 正則表達(dá)式語法簡(jiǎn)述

在使用正則表達(dá)式時(shí),了解其語法規(guī)則至關(guān)重要。以下是一些常用的正則表達(dá)式元字符及其含義:

  • . : 匹配任意字符,除了換行符。
  • * : 匹配前一個(gè)字符零次或多次。
  • + : 匹配前一個(gè)字符一次或多次。
  • ? : 匹配前一個(gè)字符零次或一次。
  • \d : 匹配數(shù)字字符。
  • \w : 匹配字母、數(shù)字或下劃線。
  • [] : 字符集,匹配括號(hào)內(nèi)的任意一個(gè)字符。

3. 相關(guān)示例

郵箱匹配

package main

import (
 "fmt"
 "regexp"
)

func main() {
	text := "郵箱是 demo@qq.com 。"
	re := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}`)
	matches := re.FindStringSubmatch(text)
	if len(matches) > 0 {
		fmt.Println("匹配的郵箱地址:", matches[0])
	}
}

匹配 URL

text := "這是一個(gè)鏈接文本:https://www.163.com 和 https://www.google.com"
re := regexp.MustCompile(`https?://[^\s]+`)
matches := re.FindAllString(text, -1)
for _, match := range matches {
	fmt.Println("匹配的鏈接:", match)
}

數(shù)字、漢字、拼音的匹配

reg1 := regexp.MustCompile(`[0-9]+`)      //正則 匹配數(shù)字
reg2 := regexp.MustCompile(`[\p{Han}]+`)  //正則 匹配漢字
reg3 := regexp.MustCompile(`[a-z]+`)      //正則 匹配拼音

通過 Find 匹配(傳入[]byte,返回[]byte)

//----------- Find 使用 -----------------//
str := "ab001234hah120210a880218end"
reg := regexp.MustCompile("\\d{6}") //六位連續(xù)的數(shù)字
// 返回str中第一個(gè)匹配reg的字符串
data := reg.Find([]byte(str))
fmt.Println(string(data))

//----------- FindAll 使用 ---------------//
//返回 str中所有匹配reg的字符串, 第二個(gè)參數(shù)表示最多返回的個(gè)數(shù),傳-1表示返回所有結(jié)果
dataSlice := reg.FindAll([]byte(str), -1)
for _, v := range dataSlice {
	fmt.Println(string(v))
}

FindIndex 獲取索引位

//------------- FindIndex ----------------//
str := "00start123endhahastart120PSend09start10000end"
// 返回第一個(gè)匹配的字符串的首末位置
reg := regexp.MustCompile("start\\d*end")  //start開始,end結(jié)束,中間全是數(shù)字
// index[0]表示開始位置,index[1]表示結(jié)束位置
index := reg.FindIndex([]byte(str))
fmt.Println("start:", index[0], ",end:", index[1], str[index[0]:index[1]])

//------------- FindAllIndex ----------------//
// 返回所有匹配的字符串首末位置
indexSlice := reg.FindAllIndex([]byte(str), -1)
for _, v := range indexSlice {
	fmt.Println("start:", v[0], ",end:", v[1], str[v[0]:v[1]])
}

FindString 操作更方便

//-----------FindString 和 FindAllString ----------------//
str := "ab001234hah120210a880218end"
reg := regexp.MustCompile("\\d{6}")     //六位連續(xù)的數(shù)字
fmt.Println(reg.FindString(str))
fmt.Println(reg.FindAllString(str, -1))
// 以下兩個(gè)方法是類似的,獲取索引位
fmt.Println(reg.FindStringIndex(str))
fmt.Println(reg.FindIndex([]byte(str)))

// 查找漢字
str1 := "hello中國hello世界和平hi好"
reg1 := regexp.MustCompile("[\\p{Han}]+")
fmt.Println(reg1.FindAllString(str1, -1))  // [中國 世界和平 好]

// 查找數(shù)字或小寫字母
str2 := "HAHA00azBAPabc09FGabHY99"
reg2 := regexp.MustCompile("[\\d|a-z]+")
fmt.Println(reg2.FindAllString(str2, -1))  // [00az abc09 ab 99]

//----------- ReplaceAllString ----------------//
// 查找并替換
str3 := "Welcome for Beijing-Tianjin CRH train"
reg3 := regexp.MustCompile(" ")
fmt.Println(reg.ReplaceAllString(str3, "@")) //將空格替換為@字符
// Welcome@for@Beijing-Tianjin@CRH@train

常用匹配

   text := `Hello 世界!123 Go.`
   // 查找連續(xù)的小寫字母
   reg := regexp.MustCompile(`[a-z]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1)  // 輸出結(jié)果["ello" "o"]
   
   // 查找連續(xù)的非小寫字母
   reg = regexp.MustCompile(`[^a-z]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))     // ["H" " 世界!123 G" "."]
  
   // 查找連續(xù)的單詞字母
   reg = regexp.MustCompile(`[\w]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello" "123" "Go"]

   // 查找連續(xù)的非單詞字母、非空白字符
   reg = regexp.MustCompile(`[^\w\s]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["世界!" "."]
   
   // 查找連續(xù)的大寫字母
   reg = regexp.MustCompile(`[[:upper:]]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["H" "G"]

   // 查找連續(xù)的非 ASCII 字符
   reg = regexp.MustCompile(`[[:^ascii:]]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["世界!"]
   
   // 查找連續(xù)的標(biāo)點(diǎn)符號(hào)
   reg = regexp.MustCompile(`[\pP]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["!" "."]

   // 查找連續(xù)的非標(biāo)點(diǎn)符號(hào)字符
   reg = regexp.MustCompile(`[\PP]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello 世界" "123 Go"]

   // 查找連續(xù)的漢字
   reg = regexp.MustCompile(`[\p{Han}]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["世界"]
   
   // 查找連續(xù)的非漢字字符
   reg = regexp.MustCompile(`[\P{Han}]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello " "!123 Go."]
   
   // 查找 Hello 或 Go
   reg = regexp.MustCompile(`Hello|Go`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello" "Go"]
   
   // 查找行首以 H 開頭,以空格結(jié)尾的字符串
   reg = regexp.MustCompile(`^H.*\s`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello 世界!123 "]
   
   // 查找行首以 H 開頭,以空白結(jié)尾的字符串(非貪婪模式)
   reg = regexp.MustCompile(`(?U)^H.*\s`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello "]
   
   // 查找以 hello 開頭(忽略大小寫),以 Go 結(jié)尾的字符串
   reg = regexp.MustCompile(`(?i:^hello).*Go`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello 世界!123 Go"]
   
   // 查找 Go.
   reg = regexp.MustCompile(`\QGo.\E`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Go."]
   
   // 查找從行首開始,以空格結(jié)尾的字符串(非貪婪模式)
   reg = regexp.MustCompile(`(?U)^.* `)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello "]

   // 查找以空格開頭,到行尾結(jié)束,中間不包含空格字符串
   reg = regexp.MustCompile(` [^ ]*$`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // [" Go."]

   // 查找“單詞邊界”之間的字符串
   reg = regexp.MustCompile(`(?U)\b.+\b`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello" " 世界!" "123" " " "Go"]

   // 查找連續(xù) 1 次到 4 次的非空格字符,并以 o 結(jié)尾的字符串
   reg = regexp.MustCompile(`[^ ]{1,4}o`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello" "Go"]
   
   // 查找 Hello 或 Go
   reg = regexp.MustCompile(`(?:Hell|G)o`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["Hello" "Go"]
   
   // 查找 Hello 或 Go,替換為 Hellooo、Gooo
   reg = regexp.MustCompile(`(?PHell|G)o`)
   fmt.Printf("%q\n", reg.ReplaceAllString(text, "${n}ooo"))   // "Hellooo 世界!123 Gooo."

   // 交換 Hello 和 Go
   reg = regexp.MustCompile(`(Hello)(.*)(Go)`)
   fmt.Printf("%q\n", reg.ReplaceAllString(text, "$3$2$1"))   // "Go 世界!123 Hello."

   reg = regexp.MustCompile(`[\f\t\n\r\v\123\x7F\x{10FFFF}\\\^\$\.\*\+\?\{\}\(\)\[\]\|]`)
   fmt.Printf("%q\n", reg.ReplaceAllString("\f\t\n\r\v\123\x7F\U0010FFFF\\^$.*+?{}()[]|", "-"))

4. 總結(jié)

在Golang中,使用regexp包可以輕松實(shí)現(xiàn)各種文本操作。無論是從文本中提取信息還是進(jìn)行驗(yàn)證,正則表達(dá)式都是編程中不可或缺的一部分。

到此這篇關(guān)于Golang中正則表達(dá)式語法及相關(guān)示例的文章就介紹到這了,更多相關(guān)Golang正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一步步教你在Linux上安裝Go語言環(huán)境

    一步步教你在Linux上安裝Go語言環(huán)境

    本文將介紹如何在Linux操作系統(tǒng)下搭建Go語言環(huán)境,Go語言是一種開源的編程語言,具有高效、簡(jiǎn)潔和并發(fā)性強(qiáng)的特點(diǎn),適用于開發(fā)各種類型的應(yīng)用程序,搭建Go語言環(huán)境是開始學(xué)習(xí)和開發(fā)Go語言項(xiàng)目的第一步,本文將詳細(xì)介紹安裝Go語言、配置環(huán)境變量以及驗(yàn)證安裝是否成功的步驟
    2023-10-10
  • Golang中時(shí)間戳與時(shí)區(qū)轉(zhuǎn)換的方法詳解

    Golang中時(shí)間戳與時(shí)區(qū)轉(zhuǎn)換的方法詳解

    時(shí)間是我們生活的基石,而在計(jì)算機(jī)科學(xué)中,時(shí)間處理顯得尤為重要,尤其是當(dāng)你在處理分布式系統(tǒng)、跨時(shí)區(qū)應(yīng)用和全球服務(wù)時(shí),時(shí)間和時(shí)區(qū)的管理變得不可或缺,在這篇文章中,我們將深入探討Golang中的時(shí)間戳與時(shí)區(qū)轉(zhuǎn)換,需要的朋友可以參考下
    2024-06-06
  • Go語言題解LeetCode1266訪問所有點(diǎn)的最小時(shí)間示例

    Go語言題解LeetCode1266訪問所有點(diǎn)的最小時(shí)間示例

    這篇文章主要為大家介紹了Go語言題解LeetCode1266訪問所有點(diǎn)的最小時(shí)間示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • GoLang抽獎(jiǎng)系統(tǒng)簡(jiǎn)易實(shí)現(xiàn)流程

    GoLang抽獎(jiǎng)系統(tǒng)簡(jiǎn)易實(shí)現(xiàn)流程

    這篇文章主要介紹了GoLang抽獎(jiǎng)系統(tǒng)實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • Golang 實(shí)現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊

    Golang 實(shí)現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊

    這篇文章主要介紹了Golang 實(shí)現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang中slice切片的實(shí)現(xiàn)示例

    Golang中slice切片的實(shí)現(xiàn)示例

    Go語言中,切片是對(duì)數(shù)組的抽象,提供了更靈活的動(dòng)態(tài)數(shù)組解決方案,本文就來介紹一下Golang中slice切片的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-09-09
  • Golang中多個(gè)if代碼優(yōu)化小技巧

    Golang中多個(gè)if代碼優(yōu)化小技巧

    這篇文章主要為大家詳細(xì)介紹了Golang中一些常用的if代碼優(yōu)化小技巧,w文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Go語言空接口與類型斷言的完全指南

    Go語言空接口與類型斷言的完全指南

    在 Go 語言中,interface{} 被稱為空接口,它是 Go 泛型時(shí)代到來之前最靈活的萬能容器,但把值裝進(jìn)去容易,拿出來時(shí)該如何安全地還原它的真實(shí)身份?這就是類型斷言(Type Assertion)的用武之地,本文將帶你徹底搞懂這對(duì)黃金搭檔,需要的朋友可以參考下
    2026-05-05
  • Golang語言中fs.ReadDir的全面指南

    Golang語言中fs.ReadDir的全面指南

    歡迎來到Golang語言中fs.ReadDir的全面指南!這個(gè)簡(jiǎn)短的引導(dǎo)將讓你掌握如何高效地使用這個(gè)功能,一起來深入探索吧,保證你會(huì)有所收獲!
    2023-12-12
  • go語言中io操作中的 io.Reader 和 io.Writer的獲取方法

    go語言中io操作中的 io.Reader 和 io.Writer的獲取方法

    在Go語言中,要進(jìn)行文件io操作,通常需要使用io.Reader或io.Writer對(duì)象,獲取這些對(duì)象的方法包括使用標(biāo)準(zhǔn)庫中已實(shí)現(xiàn)Read或Write方法的對(duì)象,感興趣的可以了解一下
    2024-10-10

最新評(píng)論

河东区| 平泉县| 福州市| 江陵县| 咸宁市| 喀什市| 如东县| 迁西县| 武清区| 琼中| 株洲县| 博客| 博客| 阿拉尔市| 仪征市| 靖远县| 沂南县| 垣曲县| 霍林郭勒市| 赤城县| 布尔津县| 大理市| 朝阳市| 分宜县| 阳原县| 无为县| 金堂县| 洪雅县| 宁强县| 从江县| 宁城县| 三原县| 宁德市| 民和| 合山市| 新巴尔虎右旗| 平远县| 崇礼县| 伽师县| 鄄城县| 莎车县|