Maison >développement back-end >Golang >Le langage Go utilise des expressions régulières pour extraire le texte d'une page Web
Exemple : Recherchez les deux nombres avant et après dans la chaîne 1000abcd123.
Exemple 1 : Exemple de correspondance avec cette chaîne
package main import( "fmt" "regexp" ) var digitsRegexp = regexp.MustCompile(`(\d+)\D+(\d+)`) func main(){ someString:="1000abcd123" fmt.Println(digitsRegexp.FindStringSubmatch(someString)) }
Le code de sortie ci-dessus :
[1000abcd123 1000 123]
Exemple 2 : Utilisation d'une expression régulière nommée
package main import( "fmt" "regexp" ) var myExp=regexp.MustCompile(`(?P<first>\d+)\.(\d+).(?P<second>\d+)`) func main(){ fmt.Printf("%+v",myExp.FindStringSubmatch("1234.5678.9")) }
Le code ci-dessus apparaît, tous ceux qui correspondent sont affichés :
[1234.5678.9 1234 5678 9]
Les groupes de capture nommés ici (?P8a11bc632ea32a57b3e3693c7987c420) L'expression régulière nommée de cette manière est unique à python et Go, Java et C# sont la méthode de dénomination (?8a11bc632ea32a57b3e3693c7987c420).
Exemple 3 : étendez la classe d'expression régulière avec une méthode pour obtenir toutes les informations de nommage et les utiliser.
package main import( "fmt" "regexp" ) //embed regexp.Regexp in a new type so we can extend it type myRegexp struct{ *regexp.Regexp } //add a new method to our new regular expression type func(r *myRegexp)FindStringSubmatchMap(s string) map[string]string{ captures:=make(map[string]string) match:=r.FindStringSubmatch(s) if match==nil{ return captures } for i,name:=range r.SubexpNames(){ //Ignore the whole regexp match and unnamed groups if i==0||name==""{ continue } captures[name]=match[i] } return captures } //an example regular expression var myExp=myRegexp{regexp.MustCompile(`(?P<first>\d+)\.(\d+).(?P<second>\d+)`)} func main(){ mmap:=myExp.FindStringSubmatchMap("1234.5678.9") ww:=mmap["first"] fmt.Println(mmap) fmt.Println(ww) }
La sortie du code ci-dessus :
map[first:1234 second:9] 1234
Exemple 4, récupérez les informations de restriction de numéro et enregistrez-les dans une carte.
package main import( "fmt" iconv "github.com/djimenez/iconv-go" "io/ioutil" "net/http" "os" "regexp" ) // embed regexp.Regexp in a new type so we can extend it type myRegexp struct{ *regexp.Regexp } // add a new method to our new regular expression type func(r *myRegexp)FindStringSubmatchMap(s string)[](map[string]string){ captures:=make([](map[string]string),0) matches:=r.FindAllStringSubmatch(s,-1) if matches==nil{ return captures } names:=r.SubexpNames() for _,match:=range matches{ cmap:=make(map[string]string) for pos,val:=range match{ name:=names[pos] if name==""{ continue } /* fmt.Println("+++++++++") fmt.Println(name) fmt.Println(val) */ cmap[name]=val } captures=append(captures,cmap) } return captures } // 抓取限号信息的正则表达式 var myExp=myRegexp{regexp.MustCompile(`自(?P<byear>[\d]{4})年(?P<bmonth>[\d]{1,2})月(?P<bday>[\d]{1,2})日至(?P<eyear>[\d]{4})年(?P<emonth>[\d]{1,2})月(?P<eday>[\d]{1,2})日,星期一至星期五限行机动车车牌尾号分别为:(?P<n11>[\d])和(?P<n12>[\d])、(?P<n21>[\d])和(?P<n22>[\d])、(?P<n31>[\d])和(?P<n32>[\d])、(?P<n41>[\d])和(?P<n42>[\d])、(?P<n51>[\d])和(?P<n52>[\d])`)} func ErrorAndExit(err error){ fmt.Fprintln(os.Stderr,err) os.Exit(1) } func main(){ response,err:=http.Get("http://www.bjjtgl.gov.cn/zhuanti/10weihao/index.html") defer response.Body.Close() if err!=nil{ ErrorAndExit(err) } input,err:=ioutil.ReadAll(response.Body) if err!=nil{ ErrorAndExit(err) } body :=make([]byte,len(input)) iconv.Convert(input,body,"gb2312","utf-8") mmap:=myExp.FindStringSubmatchMap(string(body)) fmt.Println(mmap) }
Le résultat du code ci-dessus :
[map[n32:0 n22:9 emonth:7 n11:3 n41:1 n21:4 n52:7 bmonth:4 n51:2 bday:9 n42:6 byear:2012 eday:7 eyear:2012 n12:8 n31:5] map[emonth:10 n41:5 n52:6 n31:4 byear:2012 n51:1 eyear:2012 n32:9 bmonth:7 n22:8 bday:8 n11:2 eday:6 n42:0 n21:3 n12:7] map[bday:7 n51:5 n22:7 n31:3 eday:5 n32:8 byear:2012 bmonth:10 emonth:1 eyear:2013 n11:1 n12:6 n52:0 n21:2 n42:9 n41:4] map[eyear:2013 byear:2013 n22:6 eday:10 bmonth:1 n41:3 n32:7 n31:2 n21:1 n11:5 bday:6 n12:0 n51:4 n42:8 emonth:4 n52:9]]
Pour plus de connaissances sur le langage Go, veuillez faire attention à la colonne Tutoriel sur le langage Go sur le site Web PHP chinois.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!