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

2024-06-21 1161阅读

1.定义正则表达式

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

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

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

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

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

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

      • match, err := regexp.MatchString(needle, haystack)
        // 大海捞针
        // 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次。

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

             

             

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]