go實踐二十三 使用正則

2021-09-27 06:53:33 字數 3603 閱讀 5034

使用 go run testregexp.go 執行該檔案即可

通過正則判斷是否匹配

regexp包中含有三個函式用來判斷是否匹配,如果匹配返回true,否則返回false

func match(pattern string, b byte) (matched bool, error error)

func matchreader(pattern string, r io.runereader) (matched bool, error error)

func matchstring(pattern string, s string) (matched bool, error error)

面的三個函式實現了同乙個功能,就是判斷pattern是否和輸入源匹配,匹配的話就返回true,如果解析正則出錯則返回error。三個函式的輸入源分別是byte slice、runereader和string。

*/func main() else

ip = "127.0.0.1.0"

res = isip(ip)

if !reselse

fmt.println()

vars := "1134"

res = isnumber(vars)

if !res else

vars = "13.2"

res = isnumber(vars)

if !res else

vars = ".234"

res = isnumber(vars)

if !res else

vars = "123abv"

res = isnumber(vars)

if !res else

//正則替換

fmt.println()

fmt.println("spiders")

spiders()

//正則查詢

fmt.println()

fmt.println("regexpfind")

regexpfind()

//expend

fmt.println()

fmt.println("testexpend")

testexpend()

}//驗證是不是ip位址

func isip(ip string) bool \.[0-9]\.[0-9]\.[0-9]$`

if m,_ := regexp.matchstring(regexp1,ip);!m

return true

}//驗證數字

func isnumber(num string) boolelse

} return true

}//正則替換字串

func spiders()

defer resp.body.close()

body,err := ioutil.readall(resp.body)

if err != nil

src := string(body)

"src1",src);

//將html標籤全部替換成小寫

re,_ := regexp.compile("\\<[\\s\\s]+?\\>")

src = re.replaceallstringfunc(src,strings.tolower)

//去除style

re,_ = regexp.compile(``)

src = re.replaceallstring(src,"")

//去除script

re,_ = regexp.compile(``)

src = re.replaceallstring(src,"")

//去除所有尖括號內的html**,並換成換行符

re,_ = regexp.compile("\\<[\\s\\s]+?\\>")

src = re.replaceallstring(src,"\n")

//去除連續的換行符

re,_ = regexp.compile("\\s")

src = re.replaceallstring(src,"\n")

fmt.println(strings.trimspace(src))

}func regexpfind()")

//查詢符合正則的第乙個

one := re.find(byte(a))

fmt.println("find:",string(one))

//查詢符合正則的所有slice ,n小於0表示返回全部符合的字串,不然就是返回指定的長度

all := re.findall(byte(a),-1)

fmt.println("findall",all)

//查詢符合條件的index位置,開始位置和結束位置

index := re.findindex(byte(a))

fmt.println("findindex",index)

//查詢符合條件的所有index 的位置, n同上

allindex := re.findallindex(byte(a),-1)

fmt.println("findallindex",allindex)

//正則匹配 am所有lang所有

re2,_ := regexp.compile("am(.*)lang(.*)")

//查詢submatch, 返回陣列,第乙個元素是匹配的全部元素,第二個元素是第乙個()裡面的,第三個是第二個()裡面的

//下面的輸出第乙個元素是"am learning go language"

//第二個元素是"learning go",注意保護空格的輸出

//第三個元素是"uage"

submatch := re2.findsubmatch(byte(a))

fmt.println("findsubmatch",submatch)

for _,v := range submatch

//定義和上面的findindex一樣

submatchindex := re2.findsubmatchindex(byte(a))

fmt.println(submatchindex)

//findallsubmatch,查詢所有符合條件的子匹配

submatchall := re2.findallsubmatch(byte(a),-1)

fmt.println(submatchall)

//findallsubmatchindex,查詢所有字匹配的index

submatchallindex := re2.findallsubmatchindex(byte(a),-1)

fmt.println(submatchallindex)

}func testexpend()

for _, s := range pat.findallsubmatchindex(src, -1)

fmt.println(string(res))

}參考:

隨筆 二十三

1.gradle 完a整指南 android 2.android gradle 外掛程式 3.0 挖坑日記 3.android效能優化全方面解析 4.android studio 3.2新功能特性 5.重新認識 androidstudio 和 gradle,這些都是你應該知道的 6。美團外賣andr...

演算法(二十三)

1 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。public int maxsubarray int nums return maxsum 複雜度分析 public int maxsubarray int nums return maxsum 2 ...

二十三 管道

在go語言中可以通過chan來定義管道,可以通過操作符 和 對管道進行讀取和寫入操作 通過管道維護例程狀態 使用make函式初始化,make chan type make chan type,len 不帶len引數的用於建立無快取區的管道,使用len建立指定緩衝區長度的管道 讀寫管道 可通過操作符 ...