22.1 正则表达式-定义正则表达式、正则语法

1.定义正则表达式

正则表达式意在描述隐藏在数据中的某种模式或规则。

  • 例如:下面的几个字符串看似各不相同:
    • slimshady999
    • roger
    • 1813Wagner
  • 但看似不同的数据却隐藏着相同的特征:
    • 仅由英语字母和数字组成
    • 英语字母有小写也有大写
    • 总字符数介于 5到12之间
  • 这些共同特征可以用正则表达式来描述:
    • ^[a-zA-Z0-9]{5,12}$

正则表达式犹如一门微型语言,通过特定的语法规则,描述字符数据的模式。

利用正则表达式可以很方便地完成以下任务:

  • 数据搜索
    • 在文本集合中搜索符合特定模式规则的子集
  • 数据验证
    • 验证某个文本输入是否符合给定的模式规则
  • 数据变换
    • 将文本集中符合给定模式规则的元素替换掉

Go语言标准库的regexp包对正则表达式提供支持,其中的MatchString函数接受一个正则表达式和一个被搜索字符串,返回值为bool值,用于描述该字符串中是否存在与正则表达式所描述的模式相匹配的部分。

  • match, err := regexp.MatchString(needle, haystack)
Go 复制代码
// 大海捞针
// 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

2.正则表达式语法

正则表达式作为一种模式描述语言,有其特定的语法,例如:

|-------|--------------|
| 语法标记 | 匹配规则 |
| . | 匹配换行符之前的任何字符 |
| * | 匹配0到多个任意字符 |
| ^ | 开头 |
| $ | 结尾 |
| + | 匹配1到多次 |
| ? | 匹配0到1次 |
| [] | 匹配字符集内的任意字符 |
| {n} | 匹配n次 |
| {n,} | 匹配n到多次 |
| {m,n} | 匹配m到n次 |

基于特定匹配语法所构造出的模式描述字符串即正则表达式。

假设在将用户设置的用户名插入数据库之前需要先验证其合法性,规则如下:

  • 用户名的长度至少5个字符但不得超过12个字符
  • 用户名只能由英语字母和阿拉伯数字组成,不能含有其它特殊符号和非英语字符
  • 构成用户名的英语字母可以使用小写也可以使用大写

根据匹配语法得到描述上述规则的正则表达式:^[a-zA-Z0-9]{5,12}$

  • "^"和"$"表示从字符串的第一个字符开始匹配,一直匹配到最后一个字符。
  • "[a-zA-Z0-9]"内的字符集表示与其中任意一个字符匹配,包括大小写英语字母和数字。
  • "{5,12}"内的数值区间表示至少匹配5次,但最多不超过12次。

可以想象不使用正则表达式完成这样的匹配验证并非不可能,但要复杂得多。

相关推荐
jjjxxxhhh1236 小时前
正则表达式在过滤交换机lldp信息的应用举例
正则表达式
_Soy_Milk10 小时前
后端学习路线
java·学习·go
happy_king_zi15 小时前
Goland的使用
ide·编辑器·go
软糖工程0011 天前
正则表达式【详细解读】
大数据·前端·爬虫·python·学习·正则表达式·数据分析
IT杨秀才2 天前
Go语言的Context妙用
后端·go
一雨方知深秋2 天前
新建flask项目,配置入口文件,启动项目
javascript·python·正则表达式·flask·json·html5
卡布达ovo2 天前
正则表达式和re模块
正则表达式
I'm happy2 天前
pyhton语法 正则表达式
python·正则表达式
LabVIEW开发2 天前
通过 LabVIEW 正则表达式读取数值(整数或小数)
正则表达式·labview·数字·开发技巧
夏河始溢2 天前
一七零、GORM值为0或者空字符串的时候不能被更新&创建的五种解决办法
linux·服务器·数据库·go