package main
import (
"bytes"
"fmt"
"regexp"
)
func main() {
//這個測試一個字符串是否符合一個表達式。
match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
fmt.Println(match) //----->true
//上面我們是直接使用字符串,但是對于一些其他的正則任務(wù),你需要使用 Compile 一個優(yōu)化的 Regexp 結(jié)構(gòu)體。
r, _ := regexp.Compile("p([a-z]+)ch")
//這個結(jié)構(gòu)體有很多方法通危。這里是類似我們前面看到的一個匹配測試。
fmt.Println(r.MatchString("peach")) //----->true
//這是查找匹配字符串的。返回最左側(cè)也就是第一次匹配的結(jié)果(單詞分割符是任意非字母符號)
fmt.Println(r.FindString("peach/punch paech")) //----->peach
//這個也是查找第一次匹配的字符串的跳芳,但是返回的匹配開始和結(jié)束位置索引,如下是返回peach的p的索引0,和h的下一個索引5,左閉右開。
fmt.Println(r.FindStringIndex("peach punch")) //----->[0 5]
//FindStringSubmatch 返回第一次(也就是下面的peach)完全匹配和局部匹配的字符串竹勉。例如飞盆,這里會返回 p([a-z]+)ch 和 `([a-z]+) 的信息。
fmt.Println(r.FindStringSubmatch("peach punch")) //----->[peach ea]
//類似的次乓,這個會返回完全匹配和局部匹配的索引位置吓歇。
fmt.Println(r.FindStringSubmatchIndex("peach punch")) //----->[0 5 1 3],int數(shù)組,左閉右開區(qū)間的拼接
//帶 All 的這個函數(shù)返回所有的匹配項票腰,而不僅僅是首次匹配項城看。例如查找匹配表達式的所有項。
//第二個參數(shù):-1:返回索引匹配項杏慰;(n int)返回前n個匹配項
fmt.Println(r.FindAllString("peach punch pinch", -1)) //----->[peach punch pinch]
//這個函數(shù)提供一個正整數(shù)來限制匹配次數(shù)测柠。
fmt.Println(r.FindAllString("peach punch pinch", 2)) //----->[peach punch]
//All 同樣可以對應到上面的所有函數(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)建正則表達式常量時赃阀,可以使用 Compile 的變體MustCompile霎肯。因為 Compile 返回兩個值,不能用語常量凹耙。
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)容到一個給定的函數(shù)中,
in := []byte("a peach")
out := r.ReplaceAllFunc(in, bytes.ToUpper)
fmt.Println(string(out)) //----->a PEACH
/*#######################常見表達式###########################*/
// 查找漢字
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語言正則表達式的使用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門术荤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倚喂,“玉大人,你說我怎么就攤上這事瓣戚《巳Γ” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵子库,是天一觀的道長舱权。 經(jīng)常有香客問我,道長仑嗅,這世上最難降的妖魔是什么宴倍? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮仓技,結(jié)果婚禮上鸵贬,老公的妹妹穿的比我還像新娘。我一直安慰自己脖捻,他們只是感情好恭理,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著郭变,像睡著了一般颜价。 火紅的嫁衣襯著肌膚如雪涯保。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼速侈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迫卢?” 一聲冷哼從身側(cè)響起倚搬,我...
- 正文 年R本政府宣布沛善,位于F島的核電站,受9級特大地震影響塞祈,放射性物質(zhì)發(fā)生泄漏金刁。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一议薪、第九天 我趴在偏房一處隱蔽的房頂上張望尤蛮。 院中可真熱鬧,春花似錦斯议、人聲如沸产捞。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽坯临。三九已至焊唬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間看靠,已是汗流浹背赶促。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 因為要寫一個抓取json的函數(shù)粥喜,打算通過正則表達式抓取然后發(fā)現(xiàn)標準C本身并不支持正則表達式凸主,但是發(fā)現(xiàn)在linux上...
- 我小的時候,很羨慕那些把頭發(fā)扎成馬尾松模樣的小伙伴們容客,尤其是喜歡看那些扎在馬尾松上面的蝴蝶結(jié)一閃一閃的樣子秕铛。 那時...
- 高考結(jié)束了,家在附近的學生都散了缩挑,我們這些家遠的還得在學校宿舍住最后一晚但两。長期的壓力在這一晚都釋放了,考好的沒考好...
- 雖然之前我就在室友在宿舍看資源時喵了一眼,覺得畫面好美芥丧,音樂也不錯. 不過最近過于怠懶紧阔,除了宅宿舍還是宅宿舍,并沒...