go語(yǔ)言有支持正則表達(dá)式后向引用的方法,方法如下
專(zhuān)注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)陜州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
package main
import (
"fmt"
"os"
"path/filepath"
"regexp"
)
func main() {
// 命令行參數(shù)
args := os.Args
// 檢查參數(shù)
if len(args) == 1 {
fmt.Println("ff is a file find tool. use like bottom")
fmt.Println("ff [dir] [regexp]")
return
}
if len(args) 3 {
fmt.Println("args 3")
return
}
fileName := args[1]
pattern := args[2]
file, err := os.Open(fileName)
if err != nil {
fmt.Println(err)
return
}
fi, err := file.Stat()
if err != nil {
fmt.Println(err)
return
}
if !fi.IsDir() {
fmt.Println(fileName, " is not a dir")
}
reg, err := regexp.Compile(pattern)
if err != nil {
fmt.Println(err)
return
}
// 遍歷目錄
filepath.Walk(fileName,
func(path string, f os.FileInfo, err error) error {
if err != nil {
fmt.Println(err)
return err
}
if f.IsDir() {
return nil
}
// 匹配目錄
matched := reg.MatchString(f.Name())
if matched {
fmt.Println(path)
}
return nil
})
}
基本上所有的語(yǔ)言都有正則表達(dá)式,golang也不例外。golang原生使用regexp包進(jìn)行正則表達(dá)式的匹配。正常情況下滿(mǎn)足基礎(chǔ)的查詢(xún)功能。但是,golang為了正則表達(dá)式的效率一直堅(jiān)持O(n)的搜索復(fù)雜度,所以有些高級(jí)特性將無(wú)法滿(mǎn)足。
正則表達(dá)式可以通過(guò)\1的形式反向查詢(xún)之前匹配的數(shù)據(jù),但是原生自帶的regxp是不支持該特性。所以只能使用第三方庫(kù)來(lái)支持。
先介紹幾種常用的方法:
1、使用MatchString函數(shù)或Match函數(shù)
regexp.MatchString(pattern string, s string) pattern為正則表達(dá)式,s為需要校驗(yàn)的字符串
regexp.Match(pattern string, b []byte) pattern為正則表達(dá)式,s為需要校驗(yàn)的字符串
它們的作用都是匹配,區(qū)別在于參數(shù)為字符串和切片
實(shí)例如下:
2、使用 Compile函數(shù)或MustCompile函數(shù)
它們的區(qū)別是Compile返回兩個(gè)參數(shù) Regexp,error類(lèi)型,而MustCompile只返回 Regexp類(lèi)型
它們的作用是將正則表達(dá)式進(jìn)行編譯,返回優(yōu)化的 Regexp 結(jié)構(gòu)體,該結(jié)構(gòu)體有需多方法。
實(shí)例如下:
3、查找正則匹配字串( 注:函數(shù)名包含string的所傳參數(shù)為string 其他的均為[]byte 帶All是所有)
查找正則匹配的字符串位置( 注:函數(shù)名包含string的所傳參數(shù)為string 其他的均為[]byte 帶All是所有)
4、替換
正則替換
按原文替換
函數(shù)處理替換源字串
5、Regexp結(jié)構(gòu)體中一些常用的方法