现在的位置: 首页 > 综合 > 正文

正则表达式基础

2018年05月10日 ⁄ 综合 ⁄ 共 1661字 ⁄ 字号 评论关闭

         什么是正则表达式:在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

     入门:比如你想查找hi这个词,你可以使用正则表达式hi,这是最简单的表达式了,但很不幸,很多单词包含hi这两个连续的字符,比如him,history。如果要精确地表达hi的话,我们应该使用\bhi\b,\b是一个特殊的字符,称为元字符,是单词的分界处,代表开头或结尾。如果想在hi后面加个lucy可以用\bhi\b.*\blucy\b,其中.代表除换行符以外的任意字符,*代表数量,它前面的字符可以重复任意次

    基本的元字符:

   

所以电话号码的表示方法可以是:0\d\d-\d\d\d\d\d\d\d\d,以0开头,然后是两位数字,然后是一个连接符,然后是8个数字,当然,为了避免那么多烦人的重复,我们可以引用重复表达式{n},其中n代表重复前面的值n次,号码格式可以表示为0\d{2}-\d{8},还有其他表示重复的元字符。

   重复:

 


 如\d{5,12}匹配5到12个数字,一般用来检验密码

     字符转义:

如果你想查找元字符本身,比如你查找.或*就出现了问题,你没办法指定他们,因为他们会被解释为其他意思,所以需要用到\来取消这些字符的特殊意义。

    字符类:

  匹配数字、字母或数字、空白是很简单的,因为已经有了对应这些字符集合的元字符,但是如果你想匹配没有预定义元字符的字符集合(比如a、e、i、o、u)怎么办呢

    很简单,在方括号里列出他们就行了,像[aeiou]匹配任意一个英文元音字母,[.!?]匹配标点符号,[0-9]等同于\d,[a-z0-9A-Z]等同于\w的英文部分

     分枝字符:

   相当于或,符号是|,如0\d{2}-\d{8}|0\d{3}-\d{7},能匹配三位和四位区号的电话号码。

     分组:

  我们已经提到了怎么重复单个字符,但如果想要重复多个字符又该怎么办,你可以用小括号来指定子表达式,也叫分组,然后你就可以指定这个表达式的重复次数了,如(\d{1,3}\.){3}\d{1,3}表示\d{1,3}\.重复三次,整个表达式是一个简单的ip地址匹配表达式

   后向引用:

使用小括号指定一个表达式后,匹配这个子表达式的文本(此分组捕获的文本)可以在后面做进一步处理,默认情况下每个小组会有一个组号,规则是:从左到右,以分组的左括号为标志,第一个出现的组号为1,第二个出现的组号为2,以此类推。

   后向引用用于重复搜索前面某个分组匹配的文本,例如,\1代表分组1匹配的文本,如

\b(w+)\b\s+\1\b可以用来匹配重复的单词,像go go,Kitty Kitty组号1捕获的文本(w+),隔了一个或多个或多个控告后又字符后又出现(w+).

      你也可以指定子表达式的组名。语法:(?<word>\w+)或(?'word'\w+),这样就指定了表达式\w+的名字为word

     零宽断言

   (?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除ing以外的部分),如查找 I'm singing while you're dancing.时,它会匹配sing和danc。

  (?<=exp)也叫另宽度正回顾后发断言,它断言自身出现的的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除re以外),例如查找reading a book时,它匹配ading。

    解释(?<=<(\w+)>).*(?=<\/\1>),组号1的表达式(w+),前缀为<\w+>,即<>里面是数字或字母;后缀</>里面的内容跟前缀括号里的内容一样,中间是任意表达式,刚好符合html标签,如<a> </a>,该表达式匹配的是html标签里面的内容

 

  

       



抱歉!评论已关闭.