已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
梁卓耀博客:正则表达式快速入门一正则表达式测试工具1二基本用法21.基本的名词解释22.本节涉及到的语法表23.用法举例说明3三中级用法51.分组52.反义63.后向引用64.零宽断言75.负向零宽断言86.注释:97.贪婪与懒惰9一 正则表达式的作用1. 正则表达式的英文是regular expression,意思是符合某种规则的表达式,可以将其理解为一种对文字进行模糊匹配的语言。正则表达式用一些特殊的符号(称为元字符)来代表具有某种特征(例如,某一字符必须是数字字符)的一组字符以及指定匹配的的次数,含有元字符的文本不再表示某一具体的文本内容,而是形成了一种文本模式,可以匹配符合该模式的所有文本串。例如,可以测试输入的字符串,以查看字符串内是否出现电话号码模式或身份证号码模式。即数据验证替换文本可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。事实上,正则表达式在很多语言中都会用到,其内容几乎是独立于具体语言。2. 正则表达式对字符串的操作主要包括:1.字符串匹配 2.指定字符串替换 3.指定字符串查找 4.字符串分割二 正则表达式测试工具1. 第一步:先确保你的电脑已经安装了“.Net Framework 2.0”,如果你的电脑没有安装,可以到这个网址下载并安装。网址:/downloads/details.aspx?displaylang=zh-cn&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f52. 第二步:安装Regex Tester测试工具,网址:/deerchao/downloads/RegexTester.zip3. 第三步:这是个绿色软件,下载完后打开压缩包,直接运行RegexTester.exe。4. 用法:1) 在Regex空白处输入正则表达式;2) 在Source空白处输入需要查找的内容3) 当输入完正则表达式和需要查找的内容后,按F5键,就会在Mateches空白处显示你匹配你所写的正则表达式的内容;5. 例子:1) 正则表达式“bcw*b”,这个表达式意思是匹配以字母c开头的单词先是某个单词开始处(b),然后是字母c,然后是任意数量的字母或数字(w*),最后是单词结束处(b)。2) 欲查找的内容:cbc,bda,bdamlkfdasfsd,cfdsafsdl,fdakldsaf3) 按F5键,在Mateches空白处显示结果cbc和cfdsafsdl;4) 如图1所示图1三 基本用法1. 基本的名词解释1) 字符:是指计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。2) 字符串:是指0个或更多个字符的序列。3) 文本:也就是文字,字符串。4) 匹配:某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。2. 本节涉及到的语法表代码说明.匹配除换行符以外包括空格和Tab键的任意字符*重复前一个字符或一组表达式零次或更多次 ?重复前一个字符或一组表达式零次或一次+重复前一个字符或一组表达式一次或更多次;-匹配除了换行符以外的任意字符转义符,将特殊字符转化为普通字符,取消后面跟着的字符的特殊意义;比如如果你想查找“.”,或者“*”,就需要用“”。因此,你应该使用“.”和“*”。当然,要查找本身,你也得用“.”|或的表达式,表示分支条件,匹配代码左侧的表达式或匹配代码右侧的表达式两者之一;注意:当左侧的表达式匹配条件相符的话,不再检测右侧的表达式匹配字符串的开始的一个位置,同时也表示否的表达式,表示不想被匹配的字符,一般和一起使用。也匹配输入字符串的开始$匹配字符串的结束的一个位置()匹配一组表达式,该表达式可以由其它特殊字符组成匹配包含在其中的单个字符w匹配任意一个字母或数字或下划线或汉字等 W匹配任意不是字母,数字,下划线,汉字的字符s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等S匹配任意不是空白符的字符,等价于fnrtvd匹配任意一位数字,等价于09D匹配任意非数字的字符,等价于09b匹配一个单词的开始或结束,也就是指单词和空格间的位置B匹配不是单词开头或结束的位置f匹配一个换页符n匹配一个换行符r匹配一个回车符t匹配一个制表符v匹配一个垂直制表符n重复n次,只对邻近的字符或一组表达式起作用n,m重复n到m次,只对邻近的字符或一组表达式起作用(exp)匹配exp,并捕获文本到自动命名的组里(?exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?nameexp)(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号(?=exp)匹配exp前面的位置(?=exp)匹配exp后面的位置(?!exp)零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。(?!exp)匹配前面不是exp的位置*?重复任意次,但尽可能少重复+?重复1次或更多次,但尽可能少重复?重复0次或1次,但尽可能少重复n,m?重复n到m次,但尽可能少重复n,?重复n次以上,但尽可能少重复3. 用法举例说明1) 表达式:bhib所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;含义说明:精确地查找“hi”这个单词查找结果:能查找到类似“hi,how are you!”这样的单词;如图2所示图22) 表达式:bhib.*bLucyb所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;. 匹配除换行符以外包括空格和Tab键的任意字符;*重复前一个字符或一组表达式零次或更多次;含义说明:先是一个单词hi(前后用“b”来匹配为一个单词),然后是任意个任意字符但不能是换行(用“.”来匹配),最后是“Lucy”这个单词。查找结果:能查找到类似“hi,i am Lucy”这样的字符串;如图3所示图33) 表达式:0d2-d8所需语法:d匹配一位数字;dn匹配n位数字;含义说明:这是一个查找电话号码的正则表达式,“0”代表以0开头的字符串,d后面的2(8)的意思是前面d必须连续重复匹配2次或8次;查找结果:能查找到类似这样的字符串;如图4所示图44) 表达式:baw*b所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;w匹配字母或数字或下划线或汉字等;*匹配的是数量,也就是匹配前边的内容可以连续重复使用任意次;含义说明:匹配以字母a开头的单词先是某个单词开始处(b),然后是字母a,然后是任意数量的字母或数字(w*),最后是单词结束处(b)。查找结果:能查找到类似“abc”这样的字符串;所图5所示图55) 表达式:d+所需语法:d匹配一位数字;+重复前一个字符或一组表达式一次或更多次;含义说明:d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。查找结果:能查找到类似“989”这样的字符串;如图6所示图66) 表达式:bw6b所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;w匹配任意一个字母或数字或下划线或汉字等;n重复n次,只对邻近的字符或一组表达式起作用;含义说明:匹配刚好6个字符的单词查找结果:能查找到类似“strong”这样的字符串;如图7所示图77) 表达式:d5,12$所需语法:匹配字符串的开始的一个位置;$匹配字符串的结束的一个位置;d匹配一位数字;n,m重复n到m次;含义说明:匹配长度在5至12位的数字串。“5,12”的意思是重复的次数不能少于5次,不能多于12次,否则都不匹配。这个表达式常用在验证输入的内容,比如用于一个网站要求你填写的QQ号必须是5位到12位数字时。查找结果:能查找到类似“87122234”这样的字符串;如图8所示图88) 表达式:Windowsd+所需语法:d匹配任意一位数字,等价于09;+重复前一个字符或一组表达式一次或更多次;含义说明:匹配Windows后面跟1个或更多数字查找结果:能查找到类似“Windows2003”这样的字符串;如图9所示图99) 表达式:所需语法:转义符,将特殊字符转化为普通字符,取消后面跟着的字符的特殊意义;含义说明:匹配查找结果:能查找到 “”这样的字符串;如图10所示图1010) 表达式:cdefg所需语法:匹配括号里任何一个字符或字符串;含义说明:查找符合任何一个字母“c”或“d”或“e”或“f”或“g”的字符串;查找结果:能从类似“dffasdfac”这样的字符串里查找出单个的“d”、“f”、“c”字母;拓展:0-9代表的含意与d就是完全一致的,也就是匹配一位数字;同理a-z0-9A-Z_也完全等同于w(如果只考虑英文的话)。如图11所示图1111) 表达式:(?0d2) -?d8所需语法:转义符,将特殊字符转化为普通字符,取消后面跟着的字符的特殊意义;?重复前一个字符或一组表达式零次或一次;d匹配任意一位数字,等价于09;n重复n次,只对邻近的字符或一组表达式起作用;匹配包含在其中的单个字符;含义说明:这个表达式看似复杂,但其实是分为以下几部分的“(?”、“0”、“d2”、“) -?”、“d8”。首先是一个转义字符(,然后是表示出现0次或1次(?),然后是一个0,后面跟着2个数字(d2),然后是)或-或空格中的一个,紧跟的是出现1次或不出现(?),最后是8个数字(d8)。查找结果:可匹配像(010)88886666,或02912345678等号码;如图12所示图1212) 表达式:0d2-d8|0d3-d7所需语法:d匹配任意一位数字,等价于09;n重复n次,只对邻近的字符或一组表达式起作用;|或的表达式,表示分支条件,匹配代码左侧的表达式或匹配代码右侧的表达式两者之一;注意:当左侧的表达式匹配条件相符的话,不再检测右侧的表达式;含义说明:匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(,一种是4位区号,7位本地号。查找结果:查找到类0736-5587952的电话号码;如图13所示图13四 中级用法1. 分组前面介绍了如果需要重复单个字符,直接在字符后面加上限定符(例如*或?)就行了,但是如果要重复多个字符的话,你就需要用到小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。比如(d1,3.)3d1,3就是一个不太准确的简单的查找IP地址的表达式。以下举例说明:1) 表达式:(d1,3.)3d1,3所需语法:d匹配任意一位数字,等价于09;n,m重复n到m次,只对邻近的字符或一组表达式起作用;转义符,将特殊字符转化为普通字符,取消后面跟着的字符的特殊意义;n重复n次,只对邻近的字符或一组表达式起作用;含义说明:d1,3匹配1到3位的数字,(d1,3.)3匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(d1,3)。查找结果:能查找到类似“”这样的IP地址;如图14所示图142) 表达式:(20-4d|250-5|01?dd?).)3(20-4d|250-5|01?dd?)所需语法:匹配包含在其中的单个字符;d匹配任意一位数字,等价于09;?重复前一个字符或一组表达式零次或一次;n重复n次,只对邻近的字符或一组表达式起作用;|或的表达式,表示分支条件,匹配代码左侧的表达式或匹配代码右侧的表达式两者之一;注意:当左侧的表达式匹配条件相符的话,不再检测右侧的表达式;含义说明:这才是一个每个IP列都不超过255,准确匹配正确IP地址的表达式,理解这个表达式的关键是利用分枝条件的知识理解20-4d|250-5|01?dd?这个表达式,也就是拆成“20-4d”、“250-5”、“01?dd?”三部分来分析;查找结果:能查找到类似“19”这样的IP地址;如图15所示图152. 反义有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义。1) 常用的反义代码:W 匹配任意不是字母,数字,下划线,汉字的字符 S 匹配任意不是空白符的字符 D 匹配任意非数字的字符 B 匹配不是单词开头或结束的位置 x 匹配除了x以外的任意字符 aeiou 匹配除了aeiou这几个字母以外的任意字符2) 表达式:D+所需语法:D匹配任意非数字的字符,等价于09;+重复前一个字符或一组表达式一次或更多次;含义说明:匹配任意不包含数字的字符串。查找结果:能查找类似“admin88”这样的字符串里的单个字母“a”、“d”、“m”、“i”、“n”;如图16所示图163) 表达式:+所需语法:匹配包含在其中的单个字符;表示否的表达式,表示不想被匹配的字符,一般和一起使用。也匹配输入字符串的开始;+重复前一个字符或一组表达式一次或更多次;含义说明:匹配用尖括号括起来的以c开头的字符串;查找结果:能查找到类似“”这样的字符串;如图17所示图173. 后向引用使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。后向引用用于重复搜索前面某个分组匹配的文本。1) 常用后向引用语法:1.1)(exp) 匹配exp,并捕获文本到自动命名的组里1.2)(?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?nameexp)1.3)(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号2) 表达式:b(w+)bs+1b所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;w匹配任意一个字母或数字或下划线或汉字等;+重复前一个字符或一组表达式一次或更多次;s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等;含义说明:这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(b(w+)b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(1)。查找结果:可以查找到类似“bye bye”或“go go”这样的单词;如图18所示图183) 表达式:(?w+)所需语法:(?exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?nameexp);w匹配任意一个字母或数字或下划线或汉字等;+重复前一个字符或一组表达式一次或更多次;含义说明:查找以字母或数字或下划线或汉字的一个字符串,并且把这个字符串捕获到命名为“word”的分组里(注:把尖括号换成也行:(?Wordw+))查找结果: 以查找字符串“”为例,查找结果为“com”;如图19所示图194) 表达式:b(?w+)bs+kb所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;(?exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?nameexp);s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等;+重复前一个字符或一组表达式一次或更多次;含义说明:参照上例,其实这个表达式的重点的内容是代码“kb”,表示引用“wrod”分组里面的内容;查找结果:查找类似“abc abc”这样的字符串,能找到“abc abc”这样的结果;如图20所示图204. 零宽断言1) 常用零宽断言语法(?=exp) 匹配exp前面的位置(?=exp) 匹配exp后面的位置(?!exp) 匹配后面跟的不是exp的位置(?!exp) 匹配前面不是exp的位置2) 这四个语法是用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像b,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 (?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。(?=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。注:断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。以下举例说明3) 表达式:bw+(?=ingb)所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;w匹配任意一个字母或数字或下划线或汉字等;+重复前一个字符或一组表达式一次或更多次;(?=exp)匹配exp前面的位置;含义说明:匹配以ing结尾的单词的前面部分(除了ing以外的部分), 查找结果:比如查找Im singing while youre dancing.时,它会匹配sing和danc。如图21所示图214) 表达式:(?=bre)w+b所需语法:(?=exp);w匹配任意一个字母或数字或下划线或汉字等;+重复前一个字符或一组表达式一次或更多次;b匹配一个单词的开始或结束,也就是指单词和空格间的位置;含义说明:匹配以re开头的单词的后半部分(除了re以外的部分), 查找结果:比如在查找reading a book时,它匹配ading。如图22所示图225) 表达式:(?=d)d3)+b所需语法:(?=exp)匹配exp后面的位置;d匹配任意一位数字,等价于09;n重复n次,只对邻近的字符或一组表达式起作用;+重复前一个字符或一组表达式一次或更多次;b匹配一个单词的开始或结束,也就是指单词和空格间的位置;含义说明:假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),你可以这样查找需要在前面和里面添加逗号的部分:(?=d)d3)+b,用它对1234567890进行查找时结果是234567890。查找结果:比如对“1234567890”进行查找时结果是“234567890”;如图23所示图236) 表达式:(?=s)d+(?=s)所需语法:(?=exp)匹配exp后面的位置;d匹配任意一位数字,等价于09;+重复前一个字符或一组表达式一次或更多次;(?=exp)匹配exp前面的位置;含义说明:匹配以空白符间隔的数字(注:不包括这些空白符)。查找结果:查找类似“556 99 886333”这样的字符串,结果为“99”;如图24所示图245. 负向零宽断言宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。主要用于确保某个字符没有出现,但并不想去匹配它的时候。以下是负向零宽断言的例子:1) 表达式:bw*q(?!u)w*b所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;w匹配任意一个字母或数字或下划线或汉字等;*重复前一个字符或一组表达式零次或更多次;(?!exp)零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp; 含义说明:匹配包含后面不是字母u的字母q的单词(注意:不能使用bw*quw*b这样的表达式,因为u一定要占据一个字符,如果碰到以q结尾的像“benq”这样的单词,就会出错,而负向零宽断言(?!u)就不会占有任何字符)。查找结果:查找到类似“benq,open”的字符串;如图25所示图252) 表达式:d3(?!d)所需语法:d匹配任意一位数字,等价于09;n重复n次,只对邻近的字符或一组表达式起作用;(?!exp)零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp;含义说明:匹配三位数字,而且这三位数字的后面不能是数字; 查找结果:查找类似“556g,dd334”这样的字符串,能找到“556”和“334”的结果;如图26所示图263) 表达式:b(?!abc)w)+b所需语法:b匹配一个单词的开始或结束,也就是指单词和空格间的位置;(?!exp)零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp;w匹配任意一个字母或数字或下划线或汉字等;+重复前一个字符或一组表达式一次或更多次;含义说明:匹配不包含连续字符串abc的单词。查找结果:查找类似“fdsafsdg,fabcadfda”,找到“fdsafsdg”这样的结果;如图27所示图274) 表达式:(?!a-z)d7所需语法:(?!exp)匹配前面不是exp的位置;d匹配任意一位数字,等价于09;n重复n次,只对邻近的字符或一组表达式起作用;含义说明:匹配前面不是小写字母的七位数字。查找结果:查找类似“B1234567,c9876543”这样的字符串,能找到“1234567”这样的结果;如图28所示图285) 表达式:(?=).*(?=)所需语法:(?=exp)匹配exp后面的位置;w匹配任意一个字母或数字或下划线或汉字等;+重复前一个字符或一组表达式一次或更多次;.匹配除换行符以外包括空格和Tab键的任意字符;*重复前一个字符或一组表达式零次或更多次;(?=exp)匹配exp前面的位置;转义符,将特殊字符转化为普通字符,取消后面跟着的字符的特殊意义;含义说明:匹配不包含属性的简单HTML标签内里的内容。()指定了这样的前缀:被尖括号括起来的单词(比如可能是)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 神经系统的“MDT会诊”新规总结2026
- 陕西咸阳秦宝中学2025-2026学年高二下学期期末考试物理试题(含答案)
- 2025年河南省灵宝市高二历史下册期末考试试卷含答案【达标题】
- 2026 河南 水利岗事业单位含答案
- 2026下半年小学美术教资面试绘画真题演练库
- 小学数学二年级上册复习与关联第3课时 图形的位置与测量
- 2025年江苏省张家港市高二生物下册期末考试模拟测试卷及参考答案【培优】
- 2025年湖北省天门市高二生物下册期末考试模拟卷【必考】附答案
- 2025年吉林省龙井市高二生物上册期末考试真题含答案(夺分金卷)
- 2026充电行业投融资模式创新与风险防控研究报告
- 攀枝花市东区2026年面向社会公开招考社区工作者(104人)考试备考试题及答案解析
- 2026气凝胶绝热材料在储能系统中的应用价值评估报告
- 2026新教材语文 7 培养德智体美劳全面发展的社会主义建设者和接班人 教学课件
- 季度汇报数据可视化
- 高考英语阅读理解:六大类型题目-解题方法
- 2026年湖南高速铁路职业技术学院高职单招笔试职业技能测验试题库含答案解析3套试卷
- 2026年中国电信校园招聘考试笔试试题及答案
- 2026秋新教材外研版(三起)小学英语六年级上册(全册)各单元达标测试卷及答案
- 2026年国企党支部书记竞聘试题(附答案)
- 2026年中级经济师《知识产权实务》考试历年机考真题集附参考答案详解(完整版)
- 雨课堂学堂在线学堂云《人工智能安全与伦理(北京航空航天)》单元测试考核答案
评论
0/150
提交评论