欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1. Golang中的正則表達式包

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

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

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

2. 正則表達式語法簡述

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

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

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 := "這是一個鏈接文本: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中第一個匹配reg的字符串
data := reg.Find([]byte(str))
fmt.Println(string(data))

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

FindIndex 獲取索引位

//------------- FindIndex ----------------//
str := "00start123endhahastart120PSend09start10000end"
// 返回第一個匹配的字符串的首末位置
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))
// 以下兩個方法是類似的,獲取索引位
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ù)的標點符號
   reg = regexp.MustCompile(`[\pP]+`)
   fmt.Printf("%q\n", reg.FindAllString(text, -1))   // ["!" "."]

   // 查找連續(xù)的非標點符號字符
   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包可以輕松實現(xiàn)各種文本操作。無論是從文本中提取信息還是進行驗證,正則表達式都是編程中不可或缺的一部分。

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

相關(guān)文章

  • 使用Go語言實現(xiàn)簡單聊天系統(tǒng)

    使用Go語言實現(xiàn)簡單聊天系統(tǒng)

    本文介紹了如何使用Go語言和WebSocket技術(shù)構(gòu)建一個簡單的多人聊天室系統(tǒng),包括客戶端連接管理、消息廣播和并發(fā)處理,最后,通過編寫main.go、hub.go和client.go等核心代碼模塊,具有一定的參考價值,感興趣的可以了解一下
    2024-10-10
  • go標準庫net/http服務(wù)端的實現(xiàn)示例

    go標準庫net/http服務(wù)端的實現(xiàn)示例

    go的http標準庫非常強大,本文主要介紹了go標準庫net/http服務(wù)端,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • 一文帶你使用golang手擼一個websocket中間件

    一文帶你使用golang手擼一個websocket中間件

    這篇文章主要為大家詳細介紹了如何使用golang手擼一個websocket中間件,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以參考一下
    2023-12-12
  • 用Go語言標準庫實現(xiàn)Web服務(wù)之創(chuàng)建路由

    用Go語言標準庫實現(xiàn)Web服務(wù)之創(chuàng)建路由

    在上一節(jié)中創(chuàng)建了項目,這篇文章主要介紹如何用Go語言標準庫創(chuàng)建路由,文中有詳細的代碼示例,對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下
    2023-05-05
  • Golang HashMap實現(xiàn)原理解析

    Golang HashMap實現(xiàn)原理解析

    HashMap是一種基于哈希表實現(xiàn)的鍵值對存儲結(jié)構(gòu),它通過哈希函數(shù)將鍵映射到數(shù)組的索引位置,支持高效的插入、查找和刪除操作,這篇文章主要介紹了Golang HashMap實現(xiàn)原理,需要的朋友可以參考下
    2025-04-04
  • Go語言實戰(zhàn)之實現(xiàn)均衡器功能

    Go語言實戰(zhàn)之實現(xiàn)均衡器功能

    這篇文章主要為大家詳細介紹了如何利用Golang?實現(xiàn)一個簡單的流浪均衡器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • golang 刪除切片的某個元素及剔除切片內(nèi)的零值方式

    golang 刪除切片的某個元素及剔除切片內(nèi)的零值方式

    這篇文章主要介紹了golang 刪除切片的某個元素及剔除切片內(nèi)的零值方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go與Redis實現(xiàn)分布式互斥鎖和紅鎖

    Go與Redis實現(xiàn)分布式互斥鎖和紅鎖

    這篇文章主要介紹了Go與Redis實現(xiàn)分布式互斥鎖和紅鎖,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • go?goth封裝第三方認證庫示例詳解

    go?goth封裝第三方認證庫示例詳解

    這篇文章主要為大家介紹了go?goth封裝第三方認證庫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go語言實現(xiàn)多協(xié)程文件下載器的過程詳解

    Go語言實現(xiàn)多協(xié)程文件下載器的過程詳解

    這篇文章主要介紹了Go語言實現(xiàn)多協(xié)程文件下載器的相關(guān)資料,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-08-08

最新評論