正则表达式PPT示例讲解(精品).ppt
《正则表达式PPT示例讲解(精品).ppt》由会员分享,可在线阅读,更多相关《正则表达式PPT示例讲解(精品).ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Using Regular ExpressionsUsing Regular ExpressionsLecture Goal熟悉Regex的基本语法了解高级概念如何构建、如何使用了解在C#、JavaScript中的完整实现相关技巧资料分享AgendaIntroductionSome notes about Regular ExpressionsWhy and when to use Regular ExpressionsBasic GrammarMatch charactersSet match positionReplace、Repeated charactersOther Characte
2、rsSenior ConceptMatching PatternsGroup、Replace、Reverse quotePriority level orderMethods、Ideas for building Regular ExpressionsExamples AnalysisAdditional MattersExperience&SkillsRecommend for learningQ&AIntroductionIntroductionSome notes about Regular ExpressionsSome notes about Regular ExpressionsS
3、ome notes about Regular ExpressionsSome notes about Regular Expressions起源起源最早从 Unix 中的qed 编辑器,并作为文本编辑和搜索工具中一个重要部分直到现在,属于Unix下专利,尤其是Perl中应用,NET中Regex从Perl中衍生而来简单定义?简单定义?简写为 Regexes,描述了一种字符串匹配的模式,检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。也即是一串特殊的字符,转换为某种算法,根据这个算法来匹配文本(类似通配符、SQL中的%、词法语法分析)。字符串、文本处理相关字
4、符串、文本处理相关VS、Delphi、Java、JavaScript etc 等工具、语言中对string的操作也都是最主要的方面,文本的操作也几乎无处不在,在考虑效率、性能时,正则的选择是很有必要的 复杂度、可读性?复杂度、可读性?Regexes有自己的简单语言,用于精确描述要匹配对象,一行表达式代替众多的编码,但创建复杂,含义含糊,可读性差,与Perl等成功的语言相同,但习惯后正则表达式将非常容易使用。Some notes about Regular ExpressionsSome notes about Regular Expressions在不同工具、语言中的对比在不同工具、语言中的对
5、比JavaScript、VBScript、Perl、PHP、JAVA、.NET etc.差别不是很大语法:细微差别(RegExp()在 VBScript 中使用正则表达式的效率更高,它允许在单个表达式中执行多个字符串操作。PHP继承UNIX的一贯传统,完全支持正规表达式处理PERL中的正规表达式的功能非常强大,很多讲解Regexs技术都会有涉及到PERL中的相关使用,但学起来不是那么容易。IntroductionIntroductionWhy and when to use Regular ExpressionsWhy and when to use Regular ExpressionsWh
6、y and when to use Regular ExpressionsWhy and when to use Regular Expressions作用作用模式匹配(对符合匹配项或模式组的特定串进行匹配、查找)替换效率(不同于通常的大量数组、函数实现,且容易出错)1、数据验证 测试输入的字符串,是否符合一定的规则,是否允许输入Email地址合法性、网址、电话号码、出生年月等等验证DEMODEMO2、替换文本 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本或字符替换。在某些情况下,需要对一些特殊的字符进行替换,例如“”“”之类的特殊字符,这时我们可以使用正则表达式来进
7、行替换,而不必对每一个特殊字符使用Replace替换。ex:文章排版(添加空格、Tab等缩进DEMODEMO)、结合编辑器批量处理(在QCode中除错)3、提取子字符串提取子字符串 基于模式匹配,可以查找文档内或输入域内特定的文本,也是正则中最常用的一部分,在涉及替换操作时往往都需要先提取。例如:我们常常会听到,我想提取到其中的XX内容、关键信息,想得到XX的一个参数属性值,又或是想判断用户提交的表单中是否存有相关信息(首页显示图片新闻、文字新闻的判断实现方式?)常见的提取形式:URL分析YearMonth、文章采集、搜索引擎的高亮显示等等。DEMO1DEMO1 DEMO2DEMO2Why a
8、nd when to use Regular ExpressionsBasic GrammarBasic GrammarMatch different charactersMatch different charactersMatch different charactersMatch different characters普通字符普通字符正则表达式的最简单形式是在搜索字符串中匹配其本身的单个普通字符。例如,单字符模式,如 A,不论出现在搜索字符串中的何处,它总是匹配字母 A。下面是一些单字符正则表达式模式的示例:/a/7/M/。可以将许多单字符组合起来以形成大的表达式。例如,以下正则表达式
9、组合了单字符表达式:a、7 和 M,/a7M/注意:作为普通字符,没有串联运算符(+、*、n)。只须在一个字符后面键入另一个字符。DEMODEMOMatch different charactersMatch different characters非打印字符非打印字符f换页符匹配。等效于 x0c 和 cLn换行符换行符匹配。等效于 x0a 和 cJr匹配一个回车符回车符。等效于 x0d 和 cMv垂直制表符垂直制表符匹配(文本竖向时Tab)。与 x0b 和 cK 等效t制表符制表符匹配。与 x09 和 cI 等效s匹配任何空白字符,包括空格、制表符、换页符空格、制表符、换页符等。与 fnrt
10、vfnrtv 等效S匹配任何非空白字符非空白字符。等价于 fnrtv DEMOMatch different charactersMatch different characters特殊字符特殊字符*零次或多次零次或多次匹配前面的字符或子表达式。例如,zo*匹配“z”和“zoo”,:忽略中间有符号与:遇到停止+一次一次或多次或多次匹配前面的字符或子表达式。例如,“zo+”与“zo”和“zoo”匹配,但与“z”不匹配,贪婪模式。.匹配除换行符 n之外的任何单字符。要匹配.,请使用转义标识“”?匹配前面的子表达式零次或一次子表达式零次或一次,或指明一个非贪婪限定符(pattern)?。例如,“do
11、(es)?”匹配“do”或“does”中的“do”,要匹配?字符,请使用?。(*、+、?、n、n,、n,mDEMOMatch different charactersMatch different characters特殊字符特殊字符将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配换行符,“”匹配“”,-转义连字符,当查找?、“。”、name不作为单字符(name)等时候使用()标记一个子表达式标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用(和)标记限定符限定符(n,m)表达式的开始。要匹配,请使用|指明两项、多项间的一个选择。要匹
12、配|,使用|URL的一种匹配:(https?|ftp|gopher|news|telnet|mms|rtsp):/(a-z0-9/-_+=.!%?#%&;:$()|+)尽不用.*的贪婪模式DEMOReplace Replace、Repeated charactersRepeated charactersnn 是非负整数。正好匹配匹配 n n 次次。例如,“o2”与“Bob”中的“o”不匹配,但与“food”中的两个“o”匹配,DEMOn,n 是非负整数。匹配 n n 次或多次次或多次。例如,“o2,”不匹配“Bob”中的“o”,而匹配“foooood”中的所有 o。o1,等效于 o+。o0,等
13、效于 o*。n,mm 和 n 是非负整数,其中 n=mn=m。至少匹配 n 次,至多匹配 m 次。例如,“o1,3”匹配“fooooood”中的头三个 o。o0,1 等效于 o?。注意:您不能将空格插入逗号和数字之间。不能对定位符(、$)使用限定符(匹配次数、括号等)DEMOSet match positionSet match position$前面的模式必在字符串的结尾处,如是一个多行字符串,应在任一行的结尾 其后的模式必在串开始处(匹配输入串一行的开始位置),如是一个多行字符串,应位于任一行的开始,对于指定多行文本时(也匹配nr之后的位置),出现在其他地方:xyz 1234或xzy1-4
14、这里没任何意义。将匹配除1234外的任何字符,查找类似“第一章”、“结束”时用b匹配一个字边界,即字与空格间的位置。例如,“erb”匹配“never”中的“er”,但不匹配“verb”中的“er”B匹配一个单词非边界的位置。“erB”erB”匹配匹配“verb”verb”中的中的“er”er”,但不匹配“never”中的“er”,这里的er后为边界z前面的模式必在串的结尾处;“Abz”匹配”AbcAb”中的尾部Ab,多行标志被忽略 Z前面的模式必在串结尾处或换行符前换行符前DEMOOther CharactersOther Charactersx|y与 x 或或 y 匹配。例如,“z|food
15、”与“z”或“food”匹配xyz匹配输入字符串开始的位置字符集。匹配包含的任一一字符。例如,“abc”匹配“plain”中的“a”。xyz反向字符集。匹配未包含的任何字符未包含的任何字符。例如,“abc”匹配“plain”中的“p”。a-z字符范围。匹配指定范围范围内的任何字符。例如,“a-z”匹配“a”到“z”范围内的任何小写字母 a-z 反向范围反向范围字符。匹配不在指定的范围内的任何字符。例如,“a-z”匹配任何不在“a”到“z”范围内的任何字符 括号中的任一一字符 非括号中的任一字符 DEMOOther CharactersOther Charactersd数字匹配。等效 0-9 d
16、d可匹配72,不可aa或7aD 非数字字符匹配。等效于 0-9w匹配数字、字母、下划线字符(汉字?)。与“A-Za-z0-9_”等效(CSDN中文注册ID:pLlpLupLtpLopNdpPc)W任何非字字符匹配。与“A-Za-z0-9_”等效 xn匹配匹配 n n,此处的 n 是一个十六进制转义码,必须正好是两位两位数长数长。“x41”匹配“A”,”x61”匹配a。“x041”与“x04”&“1”等效。允许在正则表达式中使用 ASCII ASCII 代码代码num匹配 num,此处的 num 是一个正整数正整数。到捕获匹配的反向引用(连续出现的字符)。例如,“(.)1”匹配两个连续相同字符
17、n标识一个八进制转义码或反向引用八进制转义码或反向引用。如果 n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数(0-7),那么 n 是八进制转义码 Other CharactersOther CharactersDemo简单的数字、字符匹配Other CharactersOther Charactersnm标识一个八进制转义码或反向引用八进制转义码或反向引用。如果 nm 前面至少有 nm nm 个捕获子表达式,那么 nm 是反向引用。如果 nm 前面至少有 n n 个捕获,那么 n 是反向引用,后面跟 m。如果前面的条件均不存在,那么当 n 和 m 是八进制
18、数(0-7)时,nm 匹配八进制转义码 nm nml当 n 是八进制数(0-3),m 和 l 是八进制数(0-7)时,匹配八进制转义码 nml un匹配 n,其中 n 是以四位十六进制数四位十六进制数表示的 Unicode 字符。例如,u00A9 匹配版权符号()。汉字的范围:u4e00-u9fa5DEMODEMOSenior ConceptSenior ConceptMatching PatternsMatching PatternsMatching PatternsMatching Patterns正则表达式的功能强大表现在模式匹配模式匹配上,而不是单一的字符匹配上(匹配空字符、字母、数字
19、、发音字符等)什么是模式匹配?子串的定位操作通常称作串的模式匹配也可说成为满足某一规则的特殊串指定的过滤形式模式匹配算法常用的一些字符串处理算法(KMP串匹配等)在进行模式匹配时,相关的查找、替换、匹配等会转化为特定的模式匹配算法这也正是正则式在前端不用写大量函数的原因提供的算法不是万能的,所以一定程度上决定了正则的局限性,在正则无法实现的地方,还需要写相关的函数Matching PatternsMatching Patterns(pattern)匹配 pattern 并捕获捕获该匹配的子表达式。可以使用$0.$9(不存在$9类似的值时,默认替换为空)属性从结果“匹配”集合中检索捕获的匹配、或
20、进行替换操作。匹配括号字符(),使用“(”或者“)”DEMODEMO(?:pattern)匹配 pattern 但不捕获不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。在用“或”字符(|)组合模式部件的情况很有用。例如,与“industry|industries”相比,“industr(?:y|ies)”是一个更加经济的表达式 Matching PatternsMatching Patterns?!pattern与?=相反该表达式匹配处于不匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,“Windows(?!95|
21、98|NT|2000)”与“Windows 3.1”中的“Windows”匹配,但不与“Windows 2000”中的“Windows”匹配。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后 d+(?!)提取到(650)中的,则不会提取DEMODEMO(?=pattern)?=后该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配非捕获匹配,即不能捕获供以后使用的匹配。例如,“Windows(?=95|98|NT|2000)”与“Windows 2000”中的“Windows”匹配,但不与“Windows 3.1”中的
22、“Windows”匹配。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行字符后 DEMODEMOSenior ConceptSenior ConceptGroupGroup、ReplaceReplace、Reverse quoteReverse quoteGroupGroup、ReplaceReplace、Reverse quoteReverse quoteNotes:Notes:替换和反向引用允许使用组匹配的字符(组作为子表达式),替换允许组作为替换模式的文本的一部分,如连续输入两次,需要用其中一个来替换。就应把匹配的单词放在一个组中,然后用这个组替换整
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 正则 表达式 PPT 示例 讲解 精品
限制150内