diff --git a/zh/07.3.md b/zh/07.3.md
index 74df4f1b..753c28ea 100644
--- a/zh/07.3.md
+++ b/zh/07.3.md
@@ -11,9 +11,9 @@ Go语言通过`regexp`标准包为正则表达式提供了官方支持,如果
`regexp`包中含有三个函数用来判断是否匹配,如果匹配返回true,否则返回false
```Go
- 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)
+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。
@@ -21,26 +21,26 @@ Go语言通过`regexp`标准包为正则表达式提供了官方支持,如果
如果要验证一个输入是不是IP地址,那么如何来判断呢?请看如下实现
```Go
- func IsIP(ip string) (b bool) {
- if m, _ := regexp.MatchString("^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$", ip); !m {
- return false
- }
- return true
+func IsIP(ip string) (b bool) {
+ if m, _ := regexp.MatchString("^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$", ip); !m {
+ return false
}
+ return true
+}
```
可以看到,`regexp`的pattern和我们平常使用的正则一模一样。再来看一个例子:当用户输入一个字符串,我们想知道是不是一次合法的输入:
```Go
- func main() {
- if len(os.Args) == 1 {
- fmt.Println("Usage: regexp [string]")
- os.Exit(1)
- } else if m, _ := regexp.MatchString("^[0-9]+$", os.Args[1]); m {
- fmt.Println("数字")
- } else {
- fmt.Println("不是数字")
- }
+func main() {
+ if len(os.Args) == 1 {
+ fmt.Println("Usage: regexp [string]")
+ os.Exit(1)
+ } else if m, _ := regexp.MatchString("^[0-9]+$", os.Args[1]); m {
+ fmt.Println("数字")
+ } else {
+ fmt.Println("不是数字")
}
+}
```
在上面的两个小例子中,我们采用了Match(Reader|String)来判断一些字符串是否符合我们的描述需求,它们使用起来非常方便。
@@ -50,52 +50,52 @@ Match模式只能用来对字符串的判断,而无法截取字符串的一部
我们经常需要一些爬虫程序,下面就以爬虫为例来说明如何使用正则来过滤或截取抓取到的数据:
```Go
- package main
+package main
- import (
- "fmt"
- "io/ioutil"
- "net/http"
- "regexp"
- "strings"
- )
+import (
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "regexp"
+ "strings"
+)
- func main() {
- resp, err := http.Get("http://www.baidu.com")
- if err != nil {
- fmt.Println("http get error.")
- }
- defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- fmt.Println("http read error")
- return
- }
-
- src := string(body)
-
- //将HTML标签全转换成小写
- re, _ := regexp.Compile("\\<[\\S\\s]+?\\>")
- src = re.ReplaceAllStringFunc(src, strings.ToLower)
-
- //去除STYLE
- re, _ = regexp.Compile("\\")
+ src = re.ReplaceAllString(src, "")
+
+ //去除SCRIPT
+ re, _ = regexp.Compile("\\