Explorar el Código

Merge pull request #45 from spawnris/master

修改第九章第一节内容,添加第九章第二节内容
无闻 hace 11 años
padre
commit
e48f63ea5c
Se han modificado 2 ficheros con 59 adiciones y 3 borrados
  1. 3 3
      eBook/09.1.md
  2. 56 0
      eBook/09.2.md

+ 3 - 3
eBook/09.1.md

@@ -1,6 +1,6 @@
 #A 标准库
 #A 标准库
 #9.1 标准库概述
 #9.1 标准库概述
-像fmt,os等这样具有常用功能的内置包在Go语言中有150个以上,它们被称为标准库,大部分(一些低级别的除外)内置于Go本身。记录在:http://golang.org/pkg/。
+像fmt,os等这样具有常用功能的内置包在Go语言中有150个以上,它们被称为标准库,大部分(一些底层的除外)内置于Go本身。记录在:http://golang.org/pkg/。
 
 
 在贯穿本书的例子和练习中,我们都是用标准库的包。可以通过查阅p.350包中的内容快速找到相关的包的实例。这里我们只是按功能进行分组来介绍这些包的简单用途,我们不会深入讨论他们的内部结构。
 在贯穿本书的例子和练习中,我们都是用标准库的包。可以通过查阅p.350包中的内容快速找到相关的包的实例。这里我们只是按功能进行分组来介绍这些包的简单用途,我们不会深入讨论他们的内部结构。
 
 
@@ -9,7 +9,7 @@ unsafe: 包含了一些打破Go语言“类型安全”的命令,一般的程
 syscall-os-os/exec:  
 syscall-os-os/exec:  
 os: 提供给我们一个平台无关性的操作系统功能接口,采用类Unix设计,隐藏了不同操作系统间差异,让不同的文件系统和操作系统对象表现一致。  
 os: 提供给我们一个平台无关性的操作系统功能接口,采用类Unix设计,隐藏了不同操作系统间差异,让不同的文件系统和操作系统对象表现一致。  
 os/exec: 提供我们运行外部操作系统命令和程序的方式。  
 os/exec: 提供我们运行外部操作系统命令和程序的方式。  
-syscall: 这是个低级别的外部包,提供了操作系统底层调用的基本接口。
+syscall: 底层的外部包,提供了操作系统底层调用的基本接口。
 
 
 通过一个Go程序让Linux重启来体现它的能力(通过sudo ./6.out来执行程序):
 通过一个Go程序让Linux重启来体现它的能力(通过sudo ./6.out来执行程序):
 
 
@@ -91,5 +91,5 @@ exp包中有许多将被编译为新包的实验性的包。它们将成为独
 ##链接
 ##链接
 - [目录](directory.md)
 - [目录](directory.md)
 - 上一节:
 - 上一节:
-- 下一节:[正则表达式](09.2.md)
+- 下一节:[regexp包](09.2.md)
 
 

+ 56 - 0
eBook/09.2.md

@@ -0,0 +1,56 @@
+#9.2 regexp包
+正则表达式语法和使用的详细信息请参考http://en.wikipedia.org/wiki/Regular_expression
+
+在下面的程序里,我们将在字符串中对正则表达式进行匹配
+
+如果是简单模式,使用Match方法便可: ok, _ := regexp.Match(pat, []byte(searchIn))  
+变量ok将返回true或者false,我们也可以使用MatchString: ok, _ := regexp.MathString(pat, searchIn)
+
+更多方法中,必须先将正则通过Compile方法返回一个Regexp对象。然后我们将掌握一些匹配,查找,替换相关的功能。
+
+示例 9.2 [pattern.go](exmaples/chapter_9/pattern.go)
+	
+	package main
+	import (
+    	"fmt"
+    	"regexp"
+    	"strconv"
+	)
+	func main() {
+    	//目标字符串
+    	searchIn := "John: 2578.34 William: 4567.23 Steve: 5632.18"
+    	pat := "[0-9]+.[0-9]+" //正则
+
+    	f := func(s string) string{
+        	v, _ := strconv.ParseFloat(s, 32)
+        	return strconv.FormatFloat(v * 2, 'f', 2, 32)
+    	}
+
+    	if ok, _ := regexp.Match(pat, []byte(searchIn)); ok {
+        fmt.Println("Match Found!")
+    	}
+
+    	re, _ := regexp.Compile(pat)
+    	//将匹配到的部分替换为"##.#"
+    	str := re.ReplaceAllString(searchIn, "##.#")
+    	fmt.Println(str)
+    	//参数为函数时
+    	str2 := re.ReplaceAllStringFunc(searchIn, f)
+    	fmt.Println(str2)
+	}
+
+
+
+输出结果:
+
+	Match Found!
+	John: ##.# William: ##.# Steve: ##.#
+	John: 5156.68 William: 9134.46 Steve: 11264.36
+
+Compile函数也可能返回一个错误,我们在使用时忽略对错误的判断是因为我们确信自己正则表达式是有效的。当用户输入或从数据中获取正则表达式的时候,我们有必要去检验它的正确性。另外我们也可以使用MustCompile方法,它可以像Compile方法一样检验正则的有效性,但是当正则不合法时程序将panic(详情查看13.2章节)。
+
+
+##链接
+- [目录](directory.md)
+- 上一节:[标准库概述](09.1.md)
+- 下一节:[锁和sync包](09.2.md)