RegEx Basic

来源:互联网 发布:跟兄弟连学php 百度云 编辑:程序博客网 时间:2024/06/05 09:15

整理简化自 《正则表达式必知必会》前六章, Ben Forta 著。

1. RegEx的用途: 

    搜索, 替换


2. 匹配单个字符
    2.1  匹配纯文本, 比如 /Ben/ 就匹配文本里含Ben的, 但绝大多数RegEx引擎默认只返回第一个
      匹配结果。注: RegEx区分大小写。
    2.2  英文句号.  用来匹配任意单个字符(包括空格,但绝大多数情况下, 不匹配换行符)。
       注: 匹配的并不总是整个字符串, 而是与某个模式相匹配的字符,即使它们只是整个字符串的
      一部分。
     如: 文本: sales1.xls  order3.xls sales2.xls
         RegEx: sales.
         结果: sales1.xls  order3.xls sales2.xls
         想要匹配 . 本身, 需用\. 来进行匹配。

3. 匹配一组字符
    3.1.[ 和 ] 定义一个字符集合, 这两个元字符之间的所有字符都是该集合的组成部分,字符集合的匹 
            配结果是能够和该集合里的任一个成员相匹配的文本。
            如 [ns]a.\.xls 可用来匹配 na1.xls, na2.xls, sa1.xls
  3.2. 字符区间用 - (连字符)来定义。如[0-5]和[012345]等价, 常用的有[0-9a-zA-Z]用来匹配任 
             意个字母(不分大小写)或数字。
    3.3.  ^ 用来取非匹配。除了那个字符集合里的字符, 其他字符都可以匹配。[^0-9]将匹配任意一个
            不是数字的字符。 ^将作用于给定字符集合里的所有字符或字符区间, 而不是仅限于紧跟在 ^
             后面的那一个字符或字符区间。

4.  使用元字符
     4.1.  用 \ 对特殊字符进行转义,如 \[ , \] , \\ 
     4.2.  空白元字符:
          
 \b     回退(并删除)一个字符(Backspace键) \f     换页符 \n     换行符 \r     回车符 \t     制表符(Tab键) \v     垂直制表符

     4.3.  匹配特定的字符类别
         
 \d任意一个数字字符(等价于[0-9]) \D任意一个非数字字符,即[^0-9] \w任意一个字母数字字符(大小写均可)或下划线字符,即[0-9a-zA-Z_] \W任意一个非字母数字或非下划线字符, 即[^a-zA-Z0-9_] \s任意一个空白字符,即[\f\n\r\t\v] \S任意一个非空白字符,即[^\f\n\r\t\v]\x和\0分别表示十六进制数值和八进制数值


5.  重复匹配
    5.1 + 匹配一个或多个字符(至少一个!),在给一个字符集合加上+后缀的时候, 应放在字符集合
               的外面,如 [0-9]+   +是一个元字符,要匹配本身需使用 \+
    5.2  * 匹配零个或多个字符(可有可无), 意为“在我前面的字符或字符集合是可选的”。如 B.* 可匹
              配 Ben
    5.3   匹配0个或一个字符(最多不超过一次)
    5.4  为重复匹配次数设定一个精确的值。如 #[0-9A-Fa-f]{6}  可用来匹配RGB值(6位的十六进制数
            值)
    5.5 为重复匹配次数设定一个区间, 如 \d{2,4}用来匹配2到4位的数字。
    5.6 至少重复多少次 , 如 {3,} 匹配至少重复3次
    5.7 防止过度匹配。* 和 + 都是“贪婪型”元字符,他们在进行匹配时的行为模式是多多益善而不是适
          可而止的。下表是常见的贪婪型元字符和对应的懒惰型版本。
贪婪型元字符懒惰型元字符**?++?{n,}{n,}?

6. 位置匹配
    6.1 由 \b 指定的单词边界,用来匹配一个单词的开始或结尾。如 \bcat\b 可以匹配 The cat 
           scattered 中的第一个cat,而不能匹配第二个。
           简单来说, \b 匹配的是这样一个位置,这个位置位于一个能够用来构成单词的字符(字母,数
          字,下划线,即\w相匹配的字符)和一个不能用来构成单词的字符(与\W相匹配的字符)之间。
   6.2  字符串边界:^ 用来定义字符串开头, $用来定义字符串结尾
           注: ^ 是有着多种用途的元字符之一,只有当它出现在一个字符集合里并紧跟在[ 后面时,才能
                    发挥求非作用。
   6.3(?m) 记号是用来启用分行匹配模式的,该模式将使得RegEx引擎把行分隔符当做一个字符串分隔
           符来对待。在分行匹配模式下,^ 不仅匹配正常的字符串开头,还将匹配行分隔符(换行符)后
           面的开始位置(该位置是不可见的);类似地 $不仅匹配正常的字符串结尾,还将匹配行分隔符
           后面的结束位置。
           使用时,(?m)必须出现在整个模式的最前面。
           注: 1.很多RegEx实现不支持(?m);
                 2. 有些RegEx实现还支持使用 \A 和 \Z 来定义一个字符串的开头和结尾,但 \A 和 \Z 不会因 
                     为加上了(?m)前缀而改变行为  。

sublime里面不要用简单的ctrl-f了,再加上个Alt+R吧, 恩。
这次从印象笔记里直接拷过来居然格式没有问题,略神奇, 恩。
原创粉丝点击