使用 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建立指定緩衝區長度的管道 讀寫管道 可通過操作符 ...