1、正则表达式基础知识1.正则表达式入门(1)查找特定信息(2)查找并编辑特定信息从根本上来讲正则表达式有两个基本问题:搜索和替换。正则表达式是一种用来匹配和处理文字的字符串。正则表达式在不同的应用程序和怨言中各有不同。正则表达式是文本处理方面最强大的工具之一。正则表达式语言用来构造正则表达式,正则表达式用来完成搜索和替换操作。2.匹配单个字符Ben是一个正则表达式。正则表达式可以包含纯文本,甚至可以只包含纯文本文本:Hello my name is Ben.正则表达式:Ben结果:Hello my name is Ben.文本:Hello my name is Ben.Please visit
2、my website.正则表达式:my结果:Hello my name is Ben.Please visite my website.绝大多数的正则表达式引擎的默认行为是只返回第一个匹配结果。具体到上面的例子,原始文本的第一个my通常是一个,但第二个往往不是。字母的大小写问题:正则表达式是区分大小写的,所以Ben不匹配ben。不过绝大多数正则表达式的实现也支持不区分字母大小写的匹配操作。匹配任意字符:前面的正则表达式都是静态的纯文本,下面看看如何用正则表达式去匹配不可预知的字符。在正则表达式里,特殊字符用来给出要搜索的东西。.字符可以匹配任意一个单个的字符。文本:sales1.xlsorde
3、r3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls正则表达式:Sales结果:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls.字符可以匹配任何单个的字符,字母,数字甚至是.字符本身。文本 :sales.xlssales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls正则表达式:sales.结果:sales.
4、xlssales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls在一个正则表达式里允许多个.字符,他们既可以连续出现,也可以间隔出现在模式的不同位置。文本:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls正则表达式:.a.结果:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls文本
5、:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls正则表达式:.a.结果:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls匹配特殊字符:.字符在正则表达式中有特殊的含义。如果模式里需要一个.,就要想办法来告诉正则表达是你需要的是.字符本身而不是他在正则表达式里的特殊含义。为此,你必须在.的前面加一个(反斜杠)字符来对他进行转义。是一个元字符。文本:sales1.xlsorder
6、3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls正则表达式:.a.xls结果:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xls如果要对进行搜索,就必须对进行转义;相应的转义序列是两个连学的反斜杠字符。在绝大数正则表达式的实现里,.只能匹配除换行符以外的任何单个字符。3.匹配多个字符中的某一个在正则表达式里,我们可以用元字符来定义一个字符集合。在使用定义的字符集合里,这两个元字符之间的所有字符都是该集合的组成
7、部分,字符集合的匹配结果是能够与该集合里的任意一个成员相匹配的文本。文本:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xlsca1.xls正则表达式:nsa.xls结果:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlsna1.xlsna2.xlssa1.xlsca1.xls字符集合在需要区分字母大小写的搜索中比较常见:文本:The phrase regular expressionis often abbreviated
8、 as RegEx or regex.正则表达式:RregEex结果:The phrase regular expressionis often abbreviated as RegEx or regex.利用字符集合区间文本:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlssam.xlsna1.xlsna2.xlssa1.xlsca1.xls正则表达式:nsa0123456789.xls结果:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlssam.xlsna
9、1.xlsna2.xlssa1.xlsca1.xls文本:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlssam.xlsna1.xlsna2.xlssa1.xlsca1.xls正则表达式:nsa0-9.xls结果:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlssum.xlsna1.xlsna2.xlssa1.xlsca1.xls模式0-9的功能与0123456789功能完全等价。以下都是合法的字符区间:A-Z a-Z A-F A-z在定义一个字符区间的时候,
10、一定要避免让这个区间的尾字符小于它的首字符。-是一个特殊的元字符,作为元字符只能用在之间。在字符集合以外的地方,-只是一个普通字符,只能与-匹配。在同一个字符集合里可以给出多个字幅区间。A-Za-z0-9文本:正则表达式:#0-9A-Fa-f0-9A-Fa-f0-9A-Fa-f0-9A-Fa-f0-9A-Fa-f结果:取非匹配:除了字符集合里的字符,其他字符都可以匹配文本:sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlssam.xlsna1.xlsna2.xlssa1.xlsca1.xls正则表达式:nsa0-9.xls结果:
11、sales1.xlsorder3.xlssale2.xlssale3.xlsapac1.xlseurope2.xlssam.xlsna1.xlsna2.xlssa1.xlsca1.xls4.使用元字符也是元字符,它标志着一个字符集合的开始。文本:Var myArray=new Array();If(myArray0=0)正则表达式:myArray0结果:Var myArray=new Array();If(myArray0=0)出现结果与预期不同,这是因为在正则表达式里是用来定义一个字符集合的元字符。因此,myArry0只能匹配到myArry0。文本:Var myArray=new Array
12、();If(myArray0=0)正则表达式:myArray0结果:Var myArray=new Array();If(myArray0=0)对元字符进行转移需要用到字符。这意味着字符也是元字符它的特殊含义是对其它元字符进行转义。因此在匹配本身的时候,我们必须把它转义为。文本:homebensales正则表达式:结果:homebensales匹配空白字符:b 回退一个字符f 换页符n换行符r回车符t制表符v垂直制表符文本:101,Ben,Forta102,Jim,James103,Jim,Robertson104,Bob,Bobson正则表达式:rnrn结果:101,Ben,Forta102
13、,Jim,James103,Jim,Robertson104,Bob,Bobsonrn匹配一个回车换行组合。使用回车换行组合进行的搜索将匹配到两个连续尾行标签,而那正是两条记录之间的空白行。匹配数字:d任何一个数字字符 D任何一个非数字字符文本:Var myArray=new Array();If(myArray0=0)正则表达式:myArrayd结果:Var myArray=new Array();If(myArray0=0)匹配字母和数字:w任何一个字母字符或者下划线字符 W任何一个非字母字符或非下划线字符文本:11213 A1C2E34807548237M1B4F290046H1H2H2
14、正则表达式:wdwdwd结果:11213 A1C2E34807548237M1B4F290046H1H2H2匹配空白字符:s任何一个空白字符(等价于fnrtv)S任何一个非空白字符匹配十六进制或八进制十六进制数值要用前缀x来给出。八进制要用前缀0来给出。Posix字符类是很多正则表达式都支持的简写形式。文本:正则表达式:#:xdigit:xdigit:xdigit:xdigit:xdigit:xdigit:结果::xdigit:任何一个数字学习如何让匹配多个连续重复的字符:要想匹配同一个字符的多次重复,只要简单的给这个字符加上一个+字符作为后缀就行了。a匹配a本身,a+将匹配一个或多个连续出现
15、的a。类似的,0-9匹配任意单个数字,0-9+将匹配一个或多个连续的数字。文本:Send personal email to ben.For questions about a book use support .Feel free to send unsolicited email to spam .正则表达式:w+w+.w+结果 Send personal email to ben.For questions about a book use support .Feel free to send unsolicited email to spam .+是一个元字符如果要匹配+,必须要使用他
16、的转义序列+。文本:Send personal email to ben or ben.forta .For questions about a book use support .If your message is urgent try ben.Feel free to send unsolicited email to spam .正则表达式:w.+w.+.w+结果:Send personal email to ben or ben.forta .For questions about a book use support .If your message is urgent try b
17、en.Feel free to send unsolicited email to spam .文本:Send personal email to ben or ben.forta .For questions about a book use support .If your message is urgent try ben.Feel free to send unsolicited email to spam .正则表达式:w.+w.+.w+结果:Send personal email to ben or ben.forta .For questions about a book use
18、 support .If your message is urgent try ben.Feel free to send unsolicited email to spam .匹配零个或多个字符:+匹配一个或多个字符,但不匹配零个字符+至少也要匹配一个字符。*的用法跟+一样质押把它放在一个字符的后面,就可以匹配该字符连续出现零次或多次的情况。文本:Hello .ben is my email address.正则表达式:w.+w.+.w+结果:Hello .ben is my email address.文本:Hello .ben is my email address.正则表达式:w+w.
19、*w.+.w+结果:Hello .ben is my email address.*是一个元字符,如果要匹配*本身就必须用他的转义字符*。匹配一个或零个字符:文本:The URL is connect securely use instead.正则表达式:http:/w./+结果:The URL is connect securely use instead.只能匹配到第一个URL地址,没能匹配到第二个。文本:The URL is connect securely use instead.正则表达式:https?:/w./+结果:The URL is connect securely use
20、instead.https?:/既可以匹配http:/,也可以匹配https:/。文本:101,Ben,Forta102,Jim,James103,Jim,Robertson104,Bob,Bobson正则表达式:r?nr?n结果:101,Ben,Forta102,Jim,James103,Jim,Robertson104,Bob,Bobson?是一个元字符。如果需要匹配?本身,就必须使用他的转义序列?。匹配的重复次数:为匹配次数设定一个精确值文本:正则表达式:#:xdigit:6结果:为重复匹配次数设定一个区间:语法还可以用来为重复匹配次数设定一个区间也就是为重复匹配次数设定一个最大值和最小
21、值文本:4/8/0310-6-20042/2/201-01-01正则表达式:d1,2-/d1,2-/d2,4结果:4/8/0310-6-20042/2/201-01-01在这个例子中使用了/的转义字符/。这在许多正则表达式的实现中是不必要的。但是有些正则表达式分析其要求我们必须这么做。为避免不必要的麻烦,在需要匹配/字符本身的时候,最好总是使用转义字符。匹配至少重复多少次:文本:1001:$496.801002:$1290.691003:$26.431004:$613.421005:$7.611006:$414.901007:$25.00正则表达式:d+:$d3,.d2结果:1001:$496
22、.801002:$1290.691003:$26.431004:$613.421005:$7.611006:$414.901007:$25.00防止过度匹配:文本:This offer is not available to customers living in AK and HI.正则表达式:.*结果:This offer is not available to customers living in AK and HI.*?是*的懒惰型版本,懒惰的含义是匹配尽可能少的字符。文本:This offer is not available to customers living in AK a
23、nd HI.正则表达式:.*?结果:This offer is not available to customers living in AK and HI.6.位置匹配位置匹配用来解决解决在什么地方进行字符串匹配操作的问题。文本:The cat scattered his food all over the room.正则表达式:cat结果:The cat scattered his food all over the room.单词边界:第一种单词边界是有限定符b指定的单词边界。b用来匹配一个单词的开始或结尾。文本:The cat scattered his food all over t
24、he room.正则表达式:bcatb结果:The cat scattered his food all over the room.文本:The captain wore his cap and cape proundly as he sat listening to the recap of how his crew saved the men from a capsized vessel.正则表达式:bcap结果:The captain wore his cap and cape proundly as he sat listening to the recap of how his crew saved the men from a capsized vessel.模式bcat将
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1