在测试golang的正则表达式时发现,取得代码运行时间很诡异,这么多代码的运行时间竟然是0。请大神解惑,下面是代码:
package main
import (
"fmt"
"regexp"
"time"
)
func main() {
text := `<img src="ddd.png"/><div>asdfa<span>44444444444</span>sdfasdf</div>laasdjflaskj555asdf<p>hjkhjk</p><img src="aaa.jpg"/>`
t1 := time.Now()
reg := regexp.MustCompile("(\\d)+") //查找所有的连续数字串
d := reg.FindAllString(text, -1)
fmt.Println(d)
//[44444444444 555]
//一维数组,所有匹配项
reg = regexp.MustCompile("<div>.*?</div>")
fmt.Println(reg.MatchString(text))
//true 是否匹配正则表达式
reg = regexp.MustCompile("<img (src)=\"(.*?)\"") //查找所有的img标签,包括子串
dd := reg.FindAllStringSubmatch(text, -1)
fmt.Println(dd)
//[[<img src="ddd.png" src ddd.png] [<img src="aaa.jpg" src aaa.jpg]]
//二维数组,每一行表示一个查找结果,每一列第0个元素表示匹配字串,第1个元素表示第1个子串,第2个元素表示第2个子串
reg = regexp.MustCompile("a{2,}")
ddd := reg.Split(text, -1)
fmt.Println(len(ddd), ddd)
//3 [<img src="ddd.png"/><div>asdfa<span>44444444444</span>sdfasdf</div>l | sdjflaskj555asdf<p>hjkhjk</p><img src=" | .jpg"/>]
//用正则表达式分割字符串,以2个以上a进行分割
reg = regexp.MustCompile("<div>(.*?)</div>")
fmt.Println(reg.ReplaceAllString(text, "$1<br/>"))
//正则替换,子串用$表示,返回替换后的字符串
//<img src="ddd.png"/>asdfa<span>44444444444</span>sdfasdf<br/>laasdjflaskj555asdf<p>hjkhjk</p><img src="aaa.jpg"/>
reg = regexp.MustCompile(`(\w+),(\w+)`)
src := "Golang,World!" // 源文本
dst := []byte("Say: ") // 目标文本(可写)
template := "Hello $1, Hello $2" // 模板
match := reg.FindStringSubmatchIndex(src) // 解析源文本
// 填写模板,并将模板追加到目标文本中
fmt.Println(reg.ExpandString(dst, template, src, match))
// "Say: Hello Golang, Hello World"
j := 1
for i := 0; i < 1000; i++ {
j++
}
t2 := time.Now()
fmt.Println("运行时间:", t2.Sub(t1))
//很奇怪运行时间为什么是0???是time包取得的时间不准确吗?还是它们运行在不同的线程中?
}
我本地运行得到的结果是
运行时间: 329.076µs
不好意思,可能是liteIde的问题,看到上面的回答,我尝试在CMD下Build程序和运行程序,发现很正常。下次要吸取这个教训。我这里是
运行时间: 15.6001ms