SlideShare ist ein Scribd-Unternehmen logo
1 von 25
指尖上的正则 表达 式
   产 品事业 部 - 戢运
        鹏
      2012.10.24
产 品事业 部


                     目标
   1.了解正则 表达 式的历 史和现 状
   2.熟悉正则 表达 式的语 法
   3. 在实际 的开发 中正确运 用相关 API
   4. 根据实际 需求,编 写出简单 的正则 表达 式
产 品事业 部


                           目录
   1.正则 表达 式是什么
   2.正则 表达 式的语 法 (JavaScript)
   3.JavaScript 中的正则 API
   4.实 例解析
正则 表达 式的由来
产 品事业 部


          正则 表达 式的定义




            模板 / 模式

              匹配

              引用
产 品事业 部


                  正则 表达 式的语 法

                 ^$.*+?=!:|/()[]{}

          b B d D w W [xyz] [^xyz] [a-z] [^a-z]


           {n} {n,} {n,m} (pattern) (?:p) (?=p) (?!p)


                       f n r s S t v
产 品事业 部


             字面量字符 (Literal Characters)
    字符         匹配                          示例
    f         换页符                         (u000C)

    n         换行符                         (u000A)

    r         回车                          (u000D)

    o         NUL 字符                      (u0000)

    t         制表符                         (u0009)

    v         垂直制表符                       (u000B)

    xnn       由十六进制数 nn 指定的拉丁字符           x0A 等价于 n

    uxxxx     由十六进行 xxxx 指定的 Unicode 字符   u0009 等价与 t

    cX        控制字符 (X 的值必须是 A-Z 或 a-z)    cJ 等价于换行符 n
产 品事业 部


            字符类 (Character Classes)
   元字符      行为                  示例
   [xyz]    位于括号内的任意字符          [abc] 匹配 'plain' 中的 a.

   [^xyz]   不在括号之中的任意字符         [^abc] 匹配 'plain' 中的 p.

   w       等价于 [a-zA-Z0-9_]

   W       等价于 [^a-zA-Z0-9_]

   s       任何 Unicode 空白符      [ fnrtv]

   S       任何非空白字符             [^ fnrtv]

   d       等价于 [0-9]

   D       等价于 [^0-9]
产 品事业 部


          字符类 (Character Classes)
   元字符    行为                         示例
   [b]   退格直接量 ( 特例 )


   .      除换行符和其它 Unicode 换行符之外的任意   a.c matches "abc", "a1c",

          字符 ,[sS] 匹配任意字符          and "a-c".
产 品事业 部


                  重复 (Repetition)
   元字符     行为                             示例
           匹配至少 n 次 , 但不超过 m 次 ,n 和 m 必
   {n,m}
           须是非负整数 , 且 n<=m

           ? 等价于 {0,1}
   {n,}    匹配至少 n 次                       o{2,} 不匹配 'Bob' 中的 'o',

                                          但匹配 'food' 中的 o.
   {n}     恰好匹配 n 次                       o{2} 不匹配 'Bob' 中的 'o',

                                          但匹配 'food' 中的 o.
   ?       匹配 0 次或 1 次 , 等价于 {0,1}.       zo? 匹配 "z" and "zo", 但

                                          不匹配 "zoo".
   +       匹配 1 次或多次 , 等价于 {1,}.          zo+ 匹配 "zo" and "zoo",

                                          但不匹配 "z".
   *       匹配 0 次或多次 , 等价于 {0,}.          zo* 匹配 "z" 和 "zoo".
产 品事业 部


            非贪 婪的重复 (non-greedy)
   元字符      行为                      示例
   *?
                                    o+? 匹配 "oooo" 中的一
   +?       在重复字符后加上问号 , 匹配模式就是非贪
                                    个 "o", o+ 则匹配所有的
   ??       婪的匹配 . 这种模式会尽可能少的对目标字
                                    "o".
   {n}?     符串进行匹配
                                    /a+?b/.exec('aaab')
   {n,}?

   {n,m}?
产 品事业 部


                      选择 、分组 和引用
   元字符           行为                            示例

   |             ( 选择 ) 匹配该符号左边或右边的子表达式        (z|f)ood 匹配 zood 或 food


                 ( 组合 ) 将几个项目组合成一个单元 , 这个      (A|B) [1-9] 匹配 "A5", 字

   (pattern)     单元可由 *,+,? 和 | 等符号使用 , 而且还可   母 A 被保存 , 可通过 n 或
                 记住和这个组合匹配的字符以供后面的引用           RegExp 的 $1-$9 引用该值
                 使用
   (?:pattern)   只组合 , 不记忆                     ai(?:r|R) 等价于 air|aiR


   n            和第 n 个分组第一次匹配的字符串相匹配
产 品事业 部


                  指定匹配的位置
   元字符     行为                        示例
           匹配字符串的开头 , 在多行检索中 , 匹配一
   ^
           行的开头
           匹配字符串的结尾 , 在多行检索中 , 匹配一
   $
           行的结尾
                                     erb 匹配 'never' 中的
   b      匹配一个单词的边界
                                     'er', 但不匹配 'verb' 中

   B      匹配非单词边界                   的 'er'.


   (?=p)   匹配 pattern 前面的位置          ^(?=.*d).{4,8}$


   (?!p)   匹配后面跟的不是 pattern 的位置
产 品事业 部


                  标志
   字符     含义

   i      忽略大小写


   g      执行全局匹配 , 即找到所有的匹配 , 而不是在找到第一个匹配后停止


          多行模式 ,^ 匹配一行的开头和字符串的开头 ,$ 匹配一行的结尾或字
   m
          符串的结尾
JavaScript 中的正则 API
RegExp
String
RegExp



exec( )   test( )
String



match( ) replace( )   search( )   split( )
实例解析
产 品事业 部


             E-mail 地址的合法性验证
   问题 描述
   使用正则表达式验证 E-mail 地址的合法性


   解决方案 1
   简单形式 --> ^S+@S+$

   它只验证 E-mail 地址中包含了单个 @ 符号,且不包含任何空白
   解决方案 2
   对字符加限制的简单形式 --> ^[w.-]+@[w.-]+$



   解决方案 3
   包括所有字符的简单形式 --> ^[w!#$&'*+/=?|.-]+@[w.-]+$
产 品事业 部


       对 手机号进 行精确 的合法性验证
   问题 描述
   使用正则表达式验证正确的手机号 (13800138000)

   解决方案 1
   简单 形式 --> /^d{11}$/
   它只验证 11 位数字


   解决方案 2
   对前三位数字进行限制 --> /^1[3|5|8]d{9}$/


   解决方案 3
   获取当前的运营商 --> /^(1[3|5|8]d)d{8}$/
产 品事业 部


                                 验证 日期
   问题 描述
   使用正则表达式验证日期 (YYYY-MM-DD)

   解决方案 1
   简单 形式 --> /^d{4}-d{2}-d{2}$/

   解决方案 2
   较为严谨 的形式 --> /^d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/

   解决方案 3
   连 接符保持一致 , 且可以是 '-' 或 '/' --> /^(d{4})([-/])(0[1-9]|1[0-2])2(0[1-9]|[1-2][0-9]|3[0-1])
   $/
Reference
http://msdn.microsoft.com/en-us/library/z908hy33(v=vs.94).aspx
exec()

http://msdn.microsoft.com/en-us/library/a55e5s6b(v=vs.94).aspx
test()

http://msdn.microsoft.com/en-us/library/7df7sf4x(v=vs.94).aspx
match()

http://msdn.microsoft.com/en-us/library/t0kbytzc(v=vs.94).aspx
replace()

http://www.w3school.com.cn/js/jsref_obj_regexp.asp
regexp obj

精通正则表达式 ( 第三版 )
正则表达式经典实例
Q&A
谢谢
!

Weitere ähnliche Inhalte

Andere mochten auch

02 Portaluri cu locuri de muncă
02   Portaluri cu locuri de muncă02   Portaluri cu locuri de muncă
02 Portaluri cu locuri de muncăIcesicon
 
Sunday vball
Sunday vballSunday vball
Sunday vballbkitts
 
Ning site #1 ex mex
Ning site #1 ex mexNing site #1 ex mex
Ning site #1 ex mexIanTurpen
 
Trip journal-presentation
Trip journal-presentationTrip journal-presentation
Trip journal-presentationiQapps
 
Create the Job of Your Dreams - George Brown Oct 2012
Create the Job of Your Dreams - George Brown Oct 2012Create the Job of Your Dreams - George Brown Oct 2012
Create the Job of Your Dreams - George Brown Oct 2012Edwin Jansen
 
001 Indrumar afaceri ce inseamna sa fii intreprinzator
001 Indrumar afaceri  ce inseamna sa fii intreprinzator001 Indrumar afaceri  ce inseamna sa fii intreprinzator
001 Indrumar afaceri ce inseamna sa fii intreprinzatorIcesicon
 
Dawley Let’s get together group
Dawley Let’s get together groupDawley Let’s get together group
Dawley Let’s get together groupPete Jackson
 

Andere mochten auch (8)

02 Portaluri cu locuri de muncă
02   Portaluri cu locuri de muncă02   Portaluri cu locuri de muncă
02 Portaluri cu locuri de muncă
 
Sunday vball
Sunday vballSunday vball
Sunday vball
 
Ning site #1 ex mex
Ning site #1 ex mexNing site #1 ex mex
Ning site #1 ex mex
 
Trip journal-presentation
Trip journal-presentationTrip journal-presentation
Trip journal-presentation
 
Create the Job of Your Dreams - George Brown Oct 2012
Create the Job of Your Dreams - George Brown Oct 2012Create the Job of Your Dreams - George Brown Oct 2012
Create the Job of Your Dreams - George Brown Oct 2012
 
Study Smart Feedback
Study Smart FeedbackStudy Smart Feedback
Study Smart Feedback
 
001 Indrumar afaceri ce inseamna sa fii intreprinzator
001 Indrumar afaceri  ce inseamna sa fii intreprinzator001 Indrumar afaceri  ce inseamna sa fii intreprinzator
001 Indrumar afaceri ce inseamna sa fii intreprinzator
 
Dawley Let’s get together group
Dawley Let’s get together groupDawley Let’s get together group
Dawley Let’s get together group
 

Ähnlich wie 指尖上的正则表达式

正则表达式傻瓜式宝典
正则表达式傻瓜式宝典正则表达式傻瓜式宝典
正则表达式傻瓜式宝典yiditushe
 
第2章 文法和语言
第2章 文法和语言第2章 文法和语言
第2章 文法和语言tjpucompiler
 
實踐大學教案20140329
實踐大學教案20140329實踐大學教案20140329
實踐大學教案20140329Mu-Fan Teng
 
sed -- A programmer's perspective
sed -- A programmer's perspectivesed -- A programmer's perspective
sed -- A programmer's perspectiveLi Ding
 

Ähnlich wie 指尖上的正则表达式 (7)

正则表达式傻瓜式宝典
正则表达式傻瓜式宝典正则表达式傻瓜式宝典
正则表达式傻瓜式宝典
 
第2章 文法和语言
第2章 文法和语言第2章 文法和语言
第2章 文法和语言
 
第三章
第三章第三章
第三章
 
實踐大學教案20140329
實踐大學教案20140329實踐大學教案20140329
實踐大學教案20140329
 
sed -- A programmer's perspective
sed -- A programmer's perspectivesed -- A programmer's perspective
sed -- A programmer's perspective
 
SCJP ch10
SCJP ch10SCJP ch10
SCJP ch10
 
Swift基礎
Swift基礎Swift基礎
Swift基礎
 

指尖上的正则表达式

  • 1. 指尖上的正则 表达 式 产 品事业 部 - 戢运 鹏 2012.10.24
  • 2. 产 品事业 部 目标 1.了解正则 表达 式的历 史和现 状 2.熟悉正则 表达 式的语 法 3. 在实际 的开发 中正确运 用相关 API 4. 根据实际 需求,编 写出简单 的正则 表达 式
  • 3. 产 品事业 部 目录 1.正则 表达 式是什么 2.正则 表达 式的语 法 (JavaScript) 3.JavaScript 中的正则 API 4.实 例解析
  • 5. 产 品事业 部 正则 表达 式的定义 模板 / 模式 匹配 引用
  • 6. 产 品事业 部 正则 表达 式的语 法 ^$.*+?=!:|/()[]{} b B d D w W [xyz] [^xyz] [a-z] [^a-z] {n} {n,} {n,m} (pattern) (?:p) (?=p) (?!p) f n r s S t v
  • 7. 产 品事业 部 字面量字符 (Literal Characters) 字符 匹配 示例 f 换页符 (u000C) n 换行符 (u000A) r 回车 (u000D) o NUL 字符 (u0000) t 制表符 (u0009) v 垂直制表符 (u000B) xnn 由十六进制数 nn 指定的拉丁字符 x0A 等价于 n uxxxx 由十六进行 xxxx 指定的 Unicode 字符 u0009 等价与 t cX 控制字符 (X 的值必须是 A-Z 或 a-z) cJ 等价于换行符 n
  • 8. 产 品事业 部 字符类 (Character Classes) 元字符 行为 示例 [xyz] 位于括号内的任意字符 [abc] 匹配 'plain' 中的 a. [^xyz] 不在括号之中的任意字符 [^abc] 匹配 'plain' 中的 p. w 等价于 [a-zA-Z0-9_] W 等价于 [^a-zA-Z0-9_] s 任何 Unicode 空白符 [ fnrtv] S 任何非空白字符 [^ fnrtv] d 等价于 [0-9] D 等价于 [^0-9]
  • 9. 产 品事业 部 字符类 (Character Classes) 元字符 行为 示例 [b] 退格直接量 ( 特例 ) . 除换行符和其它 Unicode 换行符之外的任意 a.c matches "abc", "a1c", 字符 ,[sS] 匹配任意字符 and "a-c".
  • 10. 产 品事业 部 重复 (Repetition) 元字符 行为 示例 匹配至少 n 次 , 但不超过 m 次 ,n 和 m 必 {n,m} 须是非负整数 , 且 n<=m ? 等价于 {0,1} {n,} 匹配至少 n 次 o{2,} 不匹配 'Bob' 中的 'o', 但匹配 'food' 中的 o. {n} 恰好匹配 n 次 o{2} 不匹配 'Bob' 中的 'o', 但匹配 'food' 中的 o. ? 匹配 0 次或 1 次 , 等价于 {0,1}. zo? 匹配 "z" and "zo", 但 不匹配 "zoo". + 匹配 1 次或多次 , 等价于 {1,}. zo+ 匹配 "zo" and "zoo", 但不匹配 "z". * 匹配 0 次或多次 , 等价于 {0,}. zo* 匹配 "z" 和 "zoo".
  • 11. 产 品事业 部 非贪 婪的重复 (non-greedy) 元字符 行为 示例 *? o+? 匹配 "oooo" 中的一 +? 在重复字符后加上问号 , 匹配模式就是非贪 个 "o", o+ 则匹配所有的 ?? 婪的匹配 . 这种模式会尽可能少的对目标字 "o". {n}? 符串进行匹配 /a+?b/.exec('aaab') {n,}? {n,m}?
  • 12. 产 品事业 部 选择 、分组 和引用 元字符 行为 示例 | ( 选择 ) 匹配该符号左边或右边的子表达式 (z|f)ood 匹配 zood 或 food ( 组合 ) 将几个项目组合成一个单元 , 这个 (A|B) [1-9] 匹配 "A5", 字 (pattern) 单元可由 *,+,? 和 | 等符号使用 , 而且还可 母 A 被保存 , 可通过 n 或 记住和这个组合匹配的字符以供后面的引用 RegExp 的 $1-$9 引用该值 使用 (?:pattern) 只组合 , 不记忆 ai(?:r|R) 等价于 air|aiR n 和第 n 个分组第一次匹配的字符串相匹配
  • 13. 产 品事业 部 指定匹配的位置 元字符 行为 示例 匹配字符串的开头 , 在多行检索中 , 匹配一 ^ 行的开头 匹配字符串的结尾 , 在多行检索中 , 匹配一 $ 行的结尾 erb 匹配 'never' 中的 b 匹配一个单词的边界 'er', 但不匹配 'verb' 中 B 匹配非单词边界 的 'er'. (?=p) 匹配 pattern 前面的位置 ^(?=.*d).{4,8}$ (?!p) 匹配后面跟的不是 pattern 的位置
  • 14. 产 品事业 部 标志 字符 含义 i 忽略大小写 g 执行全局匹配 , 即找到所有的匹配 , 而不是在找到第一个匹配后停止 多行模式 ,^ 匹配一行的开头和字符串的开头 ,$ 匹配一行的结尾或字 m 符串的结尾
  • 17. RegExp exec( ) test( )
  • 18. String match( ) replace( ) search( ) split( )
  • 20. 产 品事业 部 E-mail 地址的合法性验证 问题 描述 使用正则表达式验证 E-mail 地址的合法性 解决方案 1 简单形式 --> ^S+@S+$ 它只验证 E-mail 地址中包含了单个 @ 符号,且不包含任何空白 解决方案 2 对字符加限制的简单形式 --> ^[w.-]+@[w.-]+$ 解决方案 3 包括所有字符的简单形式 --> ^[w!#$&'*+/=?|.-]+@[w.-]+$
  • 21. 产 品事业 部 对 手机号进 行精确 的合法性验证 问题 描述 使用正则表达式验证正确的手机号 (13800138000) 解决方案 1 简单 形式 --> /^d{11}$/ 它只验证 11 位数字 解决方案 2 对前三位数字进行限制 --> /^1[3|5|8]d{9}$/ 解决方案 3 获取当前的运营商 --> /^(1[3|5|8]d)d{8}$/
  • 22. 产 品事业 部 验证 日期 问题 描述 使用正则表达式验证日期 (YYYY-MM-DD) 解决方案 1 简单 形式 --> /^d{4}-d{2}-d{2}$/ 解决方案 2 较为严谨 的形式 --> /^d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/ 解决方案 3 连 接符保持一致 , 且可以是 '-' 或 '/' --> /^(d{4})([-/])(0[1-9]|1[0-2])2(0[1-9]|[1-2][0-9]|3[0-1]) $/
  • 24. Q&A