diff --git a/07.3.md b/07.3.md
index 57aa2c87..cee15ec5 100755
--- a/07.3.md
+++ b/07.3.md
@@ -1,237 +1,237 @@
-# 7.3 正则处理
-正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具。虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活。按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何想你要得到的字符组合。如果你在Web开发中需要从一些文本数据源中获取数据,那么你只需要按照它的语法规则,随需构造出正确的模式字符串就能够从原数据源提取出有意义的文本信息。
-
-Go语言通过`regexp`标准包为正则表达式提供了官方支持,如果你已经使用过其他编程语言提供的正则相关功能,那么你应该对Go语言版本的不会太陌生,但是它们之间也有一些小的差异,因为Go实现的是RE2标准,除了\C,详细的语法描述参考:`http://code.google.com/p/re2/wiki/Syntax`
-
-其实字符串处理我们可以使用`strings`包来进行搜索(Contains、Index)、替换(Replace)和解析(Split、Join)等操作,但是这些都是简单的字符串操作,他们的搜索都是大小写敏感,而且固定的字符串,如果我们需要匹配可变的那种就没办法实现了,当然如果`strings`包能解决你的问题,那么就尽量使用它来解决。因为他们足够简单、而且性能和可读性都会比正则好。
-
-如果你还记得,在前面表单验证的小节里,我们已经接触过正则处理,在那里我们利用了它来验证输入的信息是否满足某些预设的条件。在使用中需要注意的一点就是:所有的字符都是UTF-8编码的。接下来让我们更加深入的来学习Go语言的`regexp`包相关知识吧。
-
-## 通过正则判断是否匹配
-`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。
-
-如果要验证一个输入是不是IP地址,那么如何来判断呢?请看如下实现
-
- 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和我们平常使用的正则一模一样。再来看一个例子:当用户输入一个字符串,我们想知道是不是一次合法的输入:
-
- 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)来判断一些字符串是否符合我们的描述需求,它们使用起来非常方便。
-
-## 通过正则获取内容
-Match模式只能用来对字符串的判断,而无法截取字符串的一部分、过滤字符串、或者提取出符合条件的一批字符串。如果想要满足这些需求,那就需要使用正则表达式的复杂模式。
-
-我们经常需要一些爬虫程序,下面就以爬虫为例来说明如何使用正则来过滤或截取抓取到的数据:
-
- package main
-
- 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("\\