RegEx Basic

原创 2013年08月29日 11:26:02

整理简化自 《正则表达式必知必会》前六章, 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吧, 恩。
这次从印象笔记里直接拷过来居然格式没有问题,略神奇, 恩。

Regex - Regular Expression Basic Syntax Reference

Characters Character Description Example Any character except [\^$.|?*+() All character...

C++Regex正则表达式

  • 2015年01月30日 11:00
  • 128KB
  • 下载

Eclipse正则表达式插件 Regex Util(转自开源社区)

Eclipse正则表达式插件 Regex Util Eclipse plugin for testing/editing regular expressions fl...

Boost::Regex库官方文档

  • 2010年11月29日 10:50
  • 1.2MB
  • 下载

Boost学习之正则表达式--regex

boost::regex类为C++提供了完整的正则表达式支持,并且已被接收为C++0x标准库。它同时也在Boost库中扮演着极重要的角色,不 少Boost子库都需要它的支持,有不少人甚至就是...
  • jiht594
  • jiht594
  • 2012年09月07日 08:46
  • 7323

C++ boost regex manual

  • 2011年07月27日 13:35
  • 1.16MB
  • 下载

正则表达式测试工具 Regex Tester

  • 2011年06月18日 11:43
  • 70KB
  • 下载

表单验证 增加regex 正则表达式(密码必须为字母和数字的组合)

密码为子母和数字的组合验证:关键点 regex: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/ (?!xxxx) 是正则表达式的负向零宽断言一种形式,...
  • chao430
  • chao430
  • 2017年08月04日 17:17
  • 548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RegEx Basic
举报原因:
原因补充:

(最多只允许输入30个字)