嵌入式0基础开始学习 Ⅲ Linux基础(3)正则表达式

0.问题引入

    字符串是计算机应用中最为广泛的处理对象之一(浏览器,xml文件,代码===)
    并且字符串的组合规则形式各种各样,如:
            数字字符串
            email字符串
            IP地址字符串
            网址
            ......
        
        这些都是我们程序设计需要去处理的对象,现在的问题是:
            计算机要处理这些字符串,首先要用某种语言(表达式,数据类型)
            去描述这些字符串的规则

        ===> 世界标准
                 正则表达式

1.正则表达式

         它究竟是个啥玩意?
                正则表达式是用来描述某种规则字符串的表达式        
                脱离了具体语言的一些规则,但是现在大多数的程序设计语言都实现了
                     C/C++
                     python
                     C#
                     ....
                    
                    但是每种语言中实现正则表达式的规则略有不同              


2.正则表达式的规则

        正则表达式是描述某种规则字符的表达式。
       
        如:
             十进制数字字符串
              [0-9]+
                     表达的含义: 有一个或者多个0-9的字符组合而成的字符串。

        正则表达式也叫做匹配模式,它是由一组特定含义的字符串组成,
        通常用于匹配和替换文本

        在正则表达式中的字符,分为两种:
                (1)普通字符 :只代表自己本身含义的字符
                
                (2)元字符 : 有特定的含义(不代表自己)的字符
                        
                        正则表达式中的元字符:
                             . 匹配任意单个字符
                                如果你想要表达'.'的含义
                                需要转义 \.
                                
                             [] 字符组
                                虽然由多个字符构成,但是它仍然只匹配单个字符。
                                字符组能够匹配的单个字符,都在[]内列举出来。
                                []仅匹配括号里面的一个字符
                                
                                例子:
                                     [0123456789abcdefABCDEF]
                                              表达的含义:匹配一个 十六进制的字符
                                [] 字符组里面也有一个元字符 : -
                                 - : 在[]内用于连接ASCII连续的字符
                                
                                 练习:  
                                       写一个正则表达式,用于表达一个十六进制字符
                                         [0-9a-fA-F]
                                 练习:写一个正则表达式,用来描述一个可以作为C语言中描述符的字符
                                         数字,字母,_
                                         [0-9a-zA-Z_]
                                
                               [^] 排除字符组
                                  匹配单个字符,匹配除[]内,外面的所有的字符中的单个字符
                                  如:
                                      非十进制数字字符                                      
                                      [^0-9]
                                      
                              \d: digtial
                                  匹配单个十进制数字字符
                                  \d <==> [0-9]
                              \D: Digtial
                                  匹配单个非十进制数字字符
                                  \D <==> [^0-9]    
                              \w: word
                                  匹配单个单词中能够出现的字符    
                                  字母,_,数字
                                  \w <==>[a-zA-Z_0-9]
                              \W:
                                  匹配单个非字母,数字,_
                                  \w <==>[^a-zA-Z_0-9]
                              \s: 匹配单个空白符
                                  \s <==>[\f\n\r\t\v]
                                   
                                   \f --> 换页符
                                   \n --> 换行符
                                   \r --> 回车符
                                   \t --> 制表符
                                   \v --> 垂直制表符

                              \S: 匹配单个非空白符
                                  \S <==>[^\f\n\r\t\v]    
   
                            例子:
                                  [a-z^0-9]
                                  表达的含义:
                                             匹配单个 a-z,^,0-9    
                                             如果^是排除的话,‘^’放在最前面。                                            
                               
                        匹配多个字符:
                        +  匹配一个或多个先前字符(或模式)
                            如:
                               09+
                                  =>
                                     09
                                     099
                                     0999
                                     09999
                                     ......
                               [0-9]+
                                  =>
                                     [0-9]
                                     [0-9][0-9]
                                     [0-9][0-9][0-9]
                                     .......
                        * 匹配0个或多个先前的字符(或模式)
                           如:
                                09*
                                   =>0
                                     09
                                     099
                                     0999
                                     .....
                               [0-9]*
                                   =>
                                      "" -> 空串
                                      [0-9]
                                      [0-9][0-9]
                                      [0-9][0-9][0-9]

                        ? 匹配0个或1个先前的字符(或模式)
                           如:
                                09?
                                 =>0
                                   09
                                   
                                [0-9]?
                                 => ""
                                    [0-9]                                
                        
                        {数字} 匹配固定数目的字符(或模式)
                            如:
                                88[0-9]{3}
                                  =>
                                     88[0-9][0-9][0-9]
                        
                        {最小数目,最大数目}
                               匹配至少“最小数目”,至多到“最大数目”的先前字符(或模式)
                                如:
                                    8{1,3}
                                       => 8
                                          88
                                          888
                        
                        {最小数目,}
                                匹配至少“最小数目”,上不封顶的先前字符(或模式)
                                如:
                                    abc{1,} <==> abc+
                                        =>
                                           abc
                                           abcc
                                           abccc
                                           ......
                        
                        () 作为一个整体,子模式
                                如:
                                    (abc){1,3}
                                        ==>
                                           abc
                                           abcabc
                                           abcabcabc
                                           
                        (|) 二选一
                                如:
                                    (123|abc){2}
                                        ==> 123123
                                            123abc
                                            abc123
                                            abcabc
                转义元字符:
                        \元字符  => 元字符就不是元字符了,就变成了普通字符
                            如:
                                \. 代表一个普通字符‘.’
                                \* 代表一个普通字符‘*’
                                ....

                练习:
                      1.用正则表达式描述你C语言代码中出现的十进制数字字符串
                      
                        [0-9]+
                        
                      2.请用正则表达式描述一个十六进制数字 < 2^32 的十六进制数字字符串。
                            0x / 0X
                                  
                                 0x0
                                 0x00
                                 0x1....
                                 ....
                                 ...
                                 0xffffffff
                                
                        0[xX][0-9a-fA-F]{1,8}
                                          
                                    
                        
                        
                       

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值