package main
import (
"bytes"
"fmt"
"regexp"
)
func main() {
//這個(gè)測試一個(gè)字符串是否符合一個(gè)表達(dá)式。
match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
fmt.Println(match) //----->true
//上面我們是直接使用字符串,但是對于一些其他的正則任務(wù),你需要使用 Compile 一個(gè)優(yōu)化的 Regexp 結(jié)構(gòu)體。
r, _ := regexp.Compile("p([a-z]+)ch")
//這個(gè)結(jié)構(gòu)體有很多方法。這里是類似我們前面看到的一個(gè)匹配測試。
fmt.Println(r.MatchString("peach")) //----->true
//這是查找匹配字符串的。返回最左側(cè)也就是第一次匹配的結(jié)果(單詞分割符是任意非字母符號)
fmt.Println(r.FindString("peach/punch paech")) //----->peach
//這個(gè)也是查找第一次匹配的字符串的,但是返回的匹配開始和結(jié)束位置索引,如下是返回peach的p的索引0,和h的下一個(gè)索引5,左閉右開。
fmt.Println(r.FindStringIndex("peach punch")) //----->[0 5]
//FindStringSubmatch 返回第一次(也就是下面的peach)完全匹配和局部匹配的字符串。例如,這里會(huì)返回 p([a-z]+)ch 和 `([a-z]+) 的信息。
fmt.Println(r.FindStringSubmatch("peach punch")) //----->[peach ea]
//類似的,這個(gè)會(huì)返回完全匹配和局部匹配的索引位置。
fmt.Println(r.FindStringSubmatchIndex("peach punch")) //----->[0 5 1 3],int數(shù)組,左閉右開區(qū)間的拼接
//帶 All 的這個(gè)函數(shù)返回所有的匹配項(xiàng),而不僅僅是首次匹配項(xiàng)。例如查找匹配表達(dá)式的所有項(xiàng)。
//第二個(gè)參數(shù):-1:返回索引匹配項(xiàng);(n int)返回前n個(gè)匹配項(xiàng)
fmt.Println(r.FindAllString("peach punch pinch", -1)) //----->[peach punch pinch]
//這個(gè)函數(shù)提供一個(gè)正整數(shù)來限制匹配次數(shù)。
fmt.Println(r.FindAllString("peach punch pinch", 2)) //----->[peach punch]
//All 同樣可以對應(yīng)到上面的所有函數(shù)。
fmt.Println(r.FindAllStringSubmatchIndex("peach punch pinch", -1)) //----->[[0 5 1 3] [6 11 7 9] [12 17 13 15]]
//上面的例子中,我們使用了字符串作為參數(shù),并使用了如 MatchString 這樣的方法。我們也可以提供 []byte參數(shù)并將 String 從函數(shù)名中去掉。
fmt.Println(r.Match([]byte("peach"))) //----->true
//創(chuàng)建正則表達(dá)式常量時(shí),可以使用 Compile 的變體MustCompile。因?yàn)?Compile 返回兩個(gè)值,不能用語常量。
r = regexp.MustCompile("p([a-z]+)ch")
fmt.Println(r) //----->p([a-z]+)ch
//regexp 包也可以用來替換部分字符串為其他值。
fmt.Println(r.ReplaceAllString("a peach", "<wangdy>")) //----->a <wangdy>
//Func 變量允許傳遞匹配內(nèi)容到一個(gè)給定的函數(shù)中,
in := []byte("a peach")
out := r.ReplaceAllFunc(in, bytes.ToUpper)
fmt.Println(string(out)) //----->a PEACH
/*#######################常見表達(dá)式###########################*/
// 查找漢字
testText := "Hello 世界, I am golang!"
reg := regexp.MustCompile(`[\p{Han}]+`)
fmt.Println(reg.FindAllString(testText, -1)) // ----->[世界]
reg = regexp.MustCompile(`[\P{Han}]+`)
fmt.Println(reg.FindAllString(testText, -1)) // ----->["Hello " ", I am golang!"]
fmt.Printf("%q\n", reg.FindAllString(testText, -1)) // ----->["Hello " ", I am golang!"]
//Email
reg = regexp.MustCompile(`\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*`)
fmt.Println(reg.MatchString("fjfha@qq.com"))
// 用戶名密碼:
reg = regexp.MustCompile(`[a-zA-Z]|\w{6,18}`)
fmt.Println(reg.MatchString("w_dy_246"))
//網(wǎng)上一堆……
/*##################################################*/
}
Go語言正則表達(dá)式的使用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 因?yàn)橐獙懸粋€(gè)抓取json的函數(shù),打算通過正則表達(dá)式抓取然后發(fā)現(xiàn)標(biāo)準(zhǔn)C本身并不支持正則表達(dá)式,但是發(fā)現(xiàn)在linux上...
- 我小的時(shí)候,很羨慕那些把頭發(fā)扎成馬尾松模樣的小伙伴們,尤其是喜歡看那些扎在馬尾松上面的蝴蝶結(jié)一閃一閃的樣子。 那時(shí)...
- 高考結(jié)束了,家在附近的學(xué)生都散了,我們這些家遠(yuǎn)的還得在學(xué)校宿舍住最后一晚。長期的壓力在這一晚都釋放了,考好的沒考好...
- 雖然之前我就在室友在宿舍看資源時(shí)喵了一眼,覺得畫面好美,音樂也不錯(cuò). 不過最近過于怠懶,除了宅宿舍還是宅宿舍,并沒...
- 原諒我的直白,我真的覺得錢是個(gè)不錯(cuò)的東西。 因?yàn)椋X可以做的事情太多了。 仔細(xì)想想,我們生活中方方面面都離不開一個(gè)...