《Go語言從入門到精通》Go語言中的正則表達式_第1頁
《Go語言從入門到精通》Go語言中的正則表達式_第2頁
《Go語言從入門到精通》Go語言中的正則表達式_第3頁
《Go語言從入門到精通》Go語言中的正則表達式_第4頁
《Go語言從入門到精通》Go語言中的正則表達式_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Go語言中的正則表達式Go語言從入門到精通了解正則表達式的基本概念與用途了解正則表達式的一些進階應用01REGEX02USAGE03ADVANCEDtarget目標掌握Go語言中正則表達式的常見用法目錄導航8.1正則表達式的基本概念與用法Contents正則表達式的概念

并非一般表達計算過程的數(shù)學表達式表達一種字符串“匹配模式”(patternmatching)常用用途:判斷某個字符串是否符合一定的規(guī)則從一個字符串中找出符合一定規(guī)則的子串用于替換尋找出的子串判斷字符串是否含有符合一定規(guī)則的子串patternT

:=

"太*高興"

s1

:=

"她真是太太太太太高興了!"

matched,

errT

:=

regexp.MatchString(patternT,

s1)

if

errT

!=

nil

{

tools.Printfln("正則表達式匹配時發(fā)生錯誤:%v",

errT.Error())

return}

if

matched

{

tools.Printfln("字符串%#v中包含符合正則表達式%#v的子串。",

s1,

patternT)}

else

{

tools.Printfln("字符串%#v中不包含符合正則表達式%#v的子串。",

s1,

patternT)}從字符串中提取符合一定規(guī)則的子串patternT

:=

"太*高興"

s1

:=

"她真是太太太太太高興了!"

regexT,

errT

:=

regexp.Compile(patternT)

if

errT

!=

nil

{

t.Printfln("編譯正則表達式時發(fā)生錯誤:%v",

errT.Error())

return}

matches

:=

regexT.FindAllString(s1,

-1)

t.Printfln("查找結果:%#v",

matches)用通配符“.”匹配任意字符regexT

:=

regexp.MustCompile("叫.*。")

s1

:=

"他的名字叫張小寶。"

s2

:=

"他的名字叫王小寶。"

t.Printfln("查找結果:%#v",

regexT.FindAllString(s1,

-1))

t.Printfln(“查找結果:%#v”,

regexT.FindAllString(s2,

-1))

貪婪與非貪婪匹配regexT

:=

regexp.MustCompile("真是太*")

t.Printfln("查找結果:%#v",

regexT.FindAllString("她真是太太太太太高興了!",

-1))

regexT

=

regexp.MustCompile("真是太*?")

t.Printfln("查找結果:%#v",

regexT.FindAllString("她真是太太太太太高興了!",

-1))分組提取子串regexT

:=

regexp.MustCompile("(.*?)的名字叫(.*?)。")

s

:=

"他的名字叫張小寶。他的名字叫馬小寶。她的名字叫歐陽小寶。它的名字叫喵小寶。"

listT

:=

regexT.FindStringSubmatch(s)

t.Printfln("查找結果:%#v",

listT)

t.Printfln("%v叫%v",

listT[1],

listT[2])

提取所有符合條件的帶捕獲組的匹配結果regexT

:=

regexp.MustCompile("(.*?)的名字叫(.*?)。")

s

:=

"他的名字叫張小寶。他的名字叫馬小寶。她的名字叫歐陽小寶。它的名字叫喵小寶。"

listT

:=

regexT.FindAllStringSubmatch(s,

-1)

t.Printfln("查找結果:%#v",

listT)

for

i,

v

:=

range

listT

{

t.Printfln("第%v組結果:%v叫%v",

i+1,

v[1],

v[2])}小提示:如果有第0組是指全部匹配的子串替換符合正則表達式的子串regexT

:=

regexp.MustCompile("重(.*?)公斤")

s

:=

"這個蘋果重0.5公斤,那個橙子重0.6公斤。"

t.Printfln("第1次替換后結果:%#v",

regexT.ReplaceAllString(s,

"沉"))t.Printfln("第2次替換后結果:%#v",

regexT.ReplaceAllString(s,

"重$1"))t.Printfln("第3次替換后結果:%#v",

regexT.ReplaceAllString(s,

"重$1kg"))t.Printfln("第4次替換后結果:%#v",

regexT.ReplaceAllString(s,

"重${1}kg"))轉義字符如果在正則表達式中需要表達“*”號、“?”號這些具有特殊含義的字符本身(而不是指任意次數(shù)或貪婪模式的指示符),需要用類似字符串中轉義字符的方式來書寫一般是在正則表達式中有特殊意義的字符前加反斜杠“\”,例如:\*、\?、\.等而“\”字符本身,則需要寫成“\\”目錄導航8.2正則表達式進階知識Contents單個字符的表達匹配指定范圍內(nèi)的字符:[a-z0-9],匹配指定范圍之外的字符:[^a-g蘋果0-2\.]匹配數(shù)字或非數(shù)字的字符:\d

和\D匹配空白與非空白的字符:\s

和\S

其他一些字符匹配:\r、\n、\w、\W、\pN、\PN、\P{Han}表達字符出現(xiàn)的次數(shù)(數(shù)量)“+”表示字符至少出現(xiàn)1次:[a-g蘋果0-2\.]+“*”表示字符出現(xiàn)0次或n次“?”表示字符出現(xiàn)0次或1次表示出現(xiàn)固定次數(shù):“[an]{3}”表示匹配字符“a”或“n”連續(xù)出現(xiàn)3次的情況表示出現(xiàn)次數(shù)的范圍:“[an]{2,5}”表示匹配字符“a”或“n”連續(xù)出現(xiàn)2次至5次的情況,默認按貪婪模式,非貪婪模式加“?”;可以省略其中一個數(shù)字,例如去掉5表示匹配2次以上的情況非字符匹配(位置匹配)

\A

與\z分別匹配字符串的開始與結尾,“\A.*\z”顯然將匹配整個字符串,“\A[\s\S]*\z”將匹配包括換行符在內(nèi)的整個字符串“\b”匹配單詞邊界“^”、“$”匹配字符串的開始與結束,多行模式下匹配行首與行尾使用標志位進行設置(?i)[a-n]+忽略大小寫匹配(?s).+ .可以匹配換行符(?m)^.*$

多行模式可選子串匹配s

:=

"我們是工程師。你們是工程師。湯姆和漢森也是工程師。"

regexT

:=

regexp.MustCompile(`(我們|你們)是工程師`)

t.Printfln("查找結果:%#v",

regexT.FindAllStringSubmatch(s,

-1))

非捕獲組s

:=

"我們是工程師。你們是工程師。湯姆和漢森也是工程師。"

regexT

:=

regexp.MustCompile(`(?:我們|你們)是工程師`)

t.Printfln("查找結果:%#v",

regexT.FindAllStringSubmatch(s,

-1))

獲取匹配到子串的索引位置s

:=

"世界很大,世界也很小。"

regexT

:=

regexp.MustCompile(`很.`)

locationT

:=

regexT.FindStringIndex(s)

t.Printfln("查找結果:%#v",

locationT)

t.Printfln("子串內(nèi)容:%#v",

s[locationT[0]:locationT[1]])

用正則表達式分割字符串s

:=

"世界很大,世界也很小。天涯才咫尺。"

regexT

:=

regexp.MustCompile(`[,。]`)

t.Printfln("分割結果:%#v",

regexT.Split(s,

-1))

判斷整個字符串是否匹配正則表達式s

:=

"abc123xyz"

regexT

:=

regexp.MustCompile(`[a-z]+`)

t.Printfln("判斷結果:%#v,匹配子串:%#v",

regexT.MatchString(s),

regexT.FindString(s))

regexT

=

regexp.MustCompile(`\A[a-z]+\z`)

t.Printfln("判斷結果

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論