概述

在Golang中可以用d来匹配数字。事实上,\d可以用来匹配整个范围。

0-9
复制代码

匹配任何数字的正则表达式将是

\d
复制代码

如果你只想匹配一个特定的数字,比方说5,那么正则表达式将是那个数字。

5
复制代码

如果你想匹配两个数字,那么下面将是正则表达式

\d\d
复制代码

匹配一个数字

让我们看一个例子

package main

import (
	"fmt"
	"regexp"
)

func main() {
	sampleRegexp := regexp.MustCompile(`\d`)

	fmt.Println("For regex \\d")
	match := sampleRegexp.MatchString("1")
	fmt.Printf("For 1: %t\n", match)

	match = sampleRegexp.MatchString("4")
	fmt.Printf("For 4: %t\n", match)

	match = sampleRegexp.MatchString("9")
	fmt.Printf("For 9: %t\n", match)

	match = sampleRegexp.MatchString("a")
	fmt.Printf("For a: %t\n", match)

	sampleRegexp = regexp.MustCompile(`5`)
	fmt.Println("\nFor regex 5")
	match = sampleRegexp.MatchString("5")
	fmt.Printf("For 5: %t\n", match)

	match = sampleRegexp.MatchString("6")
	fmt.Printf("For 6: %t\n", match)
}
复制代码

输出

For regex \d
For 1: true
For 4: true
For 9: true
For a: false

For regex 5
For 5: true
For 6: false
复制代码

在上面的程序中,我们有两个正则表达式的例子

  • d- 匹配任何数字

  • 5- 只匹配5

第一个匹配任何单一数字。这就是为什么它匹配

1
4
9
复制代码

而它不匹配

a
复制代码

从输出中也可以看出这一点

第二个词组只匹配**"5",不匹配 "6",这从**输出结果中可以看出。

For regex 5
For 5: true
For 6: false
复制代码

匹配重复的数字

量词可以用来匹配数字的重复。例如

  • \d+ - 匹配一个或多个数字

  • \*- 匹配零个或多个数字

  • d{N}- 匹配N个数的数字

package main

import (
	"fmt"
	"regexp"
)

func main() {
	sampleRegexp := regexp.MustCompile(`\d+`)

	fmt.Println(`For regex \d+`)
	match := sampleRegexp.MatchString("12345")
	fmt.Printf("For 12345: %t\n", match)

	match = sampleRegexp.MatchString("")
	fmt.Printf("For empty string: %t\n", match)

	sampleRegexp = regexp.MustCompile(`\d*`)

	fmt.Println()
	fmt.Println(`For regex \d*`)
	match = sampleRegexp.MatchString("12345")
	fmt.Printf("For 12345: %t\n", match)

	match = sampleRegexp.MatchString("")
	fmt.Printf("For empty string: %t\n", match)

	sampleRegexp = regexp.MustCompile(`\d{2}`)

	fmt.Println()
	fmt.Println(`For regex \d{2}`)
	match = sampleRegexp.MatchString("12")
	fmt.Printf("For 12: %t\n", match)

	match = sampleRegexp.MatchString("1")
	fmt.Printf("For 1: %t\n", match)
}
复制代码

输出

For regex \d+
For 12345: true
For empty string: false

For regex \d*
For 12345: true
For empty string: true

For regex \d{2}
For 12: true
For 1: false
复制代码

在上面的程序中,我们有三个词组的例子

  • \d+

  • \d*

  • d\{N}

\d+ regex给出了一个匹配的**"12345",但**对于一个空字符串来说是失败的。

\d*匹配**"12345 "**和一个空字符串

d{2}匹配两个数字的序列。这就是为什么它能匹配到"12 "而不能匹配到 "1"。

另外,请查看我们的Golang高级教程系列------。 Golang高级教程