Go語言正則表達式的使用

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)上一堆……
    /*##################################################*/
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肖抱,一起剝皮案震驚了整個濱河市备典,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌意述,老刑警劉巖提佣,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荤崇,居然都是意外死亡拌屏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門术荤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倚喂,“玉大人,你說我怎么就攤上這事瓣戚《巳Γ” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵子库,是天一觀的道長舱权。 經(jīng)常有香客問我,道長仑嗅,這世上最難降的妖魔是什么宴倍? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮仓技,結(jié)果婚禮上鸵贬,老公的妹妹穿的比我還像新娘。我一直安慰自己脖捻,他們只是感情好恭理,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著郭变,像睡著了一般颜价。 火紅的嫁衣襯著肌膚如雪涯保。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天周伦,我揣著相機與錄音夕春,去河邊找鬼。 笑死专挪,一個胖子當著我的面吹牛及志,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寨腔,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼速侈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迫卢?” 一聲冷哼從身側(cè)響起倚搬,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乾蛤,沒想到半個月后每界,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡家卖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年眨层,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片上荡。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡趴樱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酪捡,到底是詐尸還是另有隱情伊佃,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布沛善,位于F島的核電站,受9級特大地震影響塞祈,放射性物質(zhì)發(fā)生泄漏金刁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一议薪、第九天 我趴在偏房一處隱蔽的房頂上張望尤蛮。 院中可真熱鬧,春花似錦斯议、人聲如沸产捞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坯临。三九已至焊唬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間看靠,已是汗流浹背赶促。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挟炬,地道東北人鸥滨。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像谤祖,于是被迫代替她去往敵國和親婿滓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 因為要寫一個抓取json的函數(shù)粥喜,打算通過正則表達式抓取然后發(fā)現(xiàn)標準C本身并不支持正則表達式凸主,但是發(fā)現(xiàn)在linux上...
    zzkdev閱讀 6,965評論 0 11
  • 我小的時候,很羨慕那些把頭發(fā)扎成馬尾松模樣的小伙伴們容客,尤其是喜歡看那些扎在馬尾松上面的蝴蝶結(jié)一閃一閃的樣子秕铛。 那時...
    謝愛梅閱讀 383評論 0 2
  • 高考結(jié)束了,家在附近的學生都散了缩挑,我們這些家遠的還得在學校宿舍住最后一晚但两。長期的壓力在這一晚都釋放了,考好的沒考好...
    清風拍肩閱讀 352評論 3 4
  • 雖然之前我就在室友在宿舍看資源時喵了一眼,覺得畫面好美芥丧,音樂也不錯. 不過最近過于怠懶紧阔,除了宅宿舍還是宅宿舍,并沒...
    匆匆過客呀閱讀 872評論 4 3
  • 原諒我的直白,我真的覺得錢是個不錯的東西物遇。 因為乖仇,錢可以做的事情太多了。 仔細想想询兴,我們生活中方方面面都離不開一個...
    柳絮紛飛啊閱讀 246評論 0 0