正则表达式意在描述隐藏在数据中的某种模式或规则。
正则表达式犹如一门微型语言,通过特定的语法规则,描述字符数据的模式。
利用正则表达式可以很方便地完成以下任务:
Go语言标准库的regexp包对正则表达式提供支持,其中的MatchString函数接受一个正则表达式和一个被搜索字符串,返回值为bool值,用于描述该字符串中是否存在与正则表达式所描述的模式相匹配的部分。
- // 大海捞针
- // regexp包的MatchString函数接受一个正则表达式模式和一个被搜索
- // 字符串,返回该字符串中是否存在与正则表达式模式相匹配的部分
- package main
- import (
- "fmt"
- "log"
- "regexp"
- )
- func main() {
- //needle := "chocolate"
- needle := "(?i)chocolate" // (?i)表示忽略大小写
- haystack := "Chocolate is my favorite!"
- match, err := regexp.MatchString(needle, haystack)
- if err != nil {
- log.Fatal(err)
- }
- fmt.Println(match)
- }
- // 打印输出:
- true
正则表达式作为一种模式描述语言,有其特定的语法,例如:
| 语法标记 | 匹配规则 |
| . | 匹配换行符之前的任何字符 |
| * | 匹配0到多个任意字符 |
| ^ | 开头 |
| $ | 结尾 |
| + | 匹配1到多次 |
| ? | 匹配0到1次 |
| [] | 匹配字符集内的任意字符 |
| {n} | 匹配n次 |
| {n,} | 匹配n到多次 |
| {m,n} | 匹配m到n次 |
基于特定匹配语法所构造出的模式描述字符串即正则表达式。
假设在将用户设置的用户名插入数据库之前需要先验证其合法性,规则如下:
根据匹配语法得到描述上述规则的正则表达式:^[a-zA-Z0-9]{5,12}$
可以想象不使用正则表达式完成这样的匹配验证并非不可能,但要复杂得多。