正则表达式

一、常见元字符

 

   \b 元字符(metacharacter),单词开头或结尾,匹配一个位置。
    . 元字符,匹配除了换行符以为的任意字符。
    * 元字符,代表数量,可以是0,*前边的内容可以连续重复使用任意次以使整个表达式得到匹配。.*表示任意数量的不包含换行的字符。
   + 元字符,匹配重复1次或者更多次。
  \d 元字符,匹配一位数字(0,1,2...)。\d{3}  匹配连续三个数字.
  \s 元字符,匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。
  \w 元字符,匹配字母、数字、下划线或汉字等。
  ^  元字符,匹配字符串的开始。
  $  元字符,匹配字符串的结束。

二、转义字符用\,例如匹配*,就得用\*。

三、限定符: 

  *       重复0次或更多次 
  +       重复1次或更多次 
  ?       重复0次或一次 
 {n}     重复n次 
 {n,}    重复n次或更多次 
 {n,m}   重复n到m次

四、字符类:

  [aeiou]    匹配任何一个英文元音字母
  [.?!]      匹配标点符号.或?或!
  [0-9]      含义与\d完全一致,匹配一位数字

五、分支条件:

   用|把不同的规则分隔开。注意分支条件的顺序,匹配时将会从左到右地测试每个条件,满足,则不会测试后面的条件了。

六、分组:

   匹配重复多个字符,用小括号来指定子表达式(分组),然后可以指定字表达式出现的次数。
   匹配IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

七、反义:

   查找不属于某个能简单定义的字符类的字符。比如查找数字以外的任意字符,要用到反义。

   \W              匹配任意不是字母、数字、下划线或者汉字的字符
   \S              匹配任意不是空白符的字符
   \D              匹配任意非数字的字符
   \B              匹配不是单词开头或结束的位置
   [^x]            匹配除了x以外的任意字符
   [^aeiou]        匹配除了aeiou这几个字母以外的任意字符

八、后向引用:

   使用小括号指定分组,每个分组会自动拥有一个组号,规则是:
   从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
   后向引用用于重复搜索前面某个分组匹配的文本,例如,\1代表分组1匹配的文本。

 
   \b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。
   这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+), 最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。

九、常用分组语法:

  a)捕获: 
      (exp)          匹配exp,并捕获文本到自动命名的组里 
      (?<name>exp)   匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) 
      (?:exp)        匹配exp,不捕获匹配的文本,也不给此分组分配编号

  b)零宽断言: 
      (?=exp)        匹配exp前面的位置 
      (?<=exp)       匹配exp后面的位置 
      (?!exp)        匹配后面跟的不是exp的位置 
      (?<!exp)       匹配前面不是exp的位置 

      (?=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。 

      假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),你可以这样查找需要在前面和里面添加逗号的部分:((?<=\d)\d{3})+\b,用它对1234567890进行查找时结果是234567890。 

      下面这个例子同时使用了这两种断言:(?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次强调,不包括这些空白符)。 

      零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。 

      同理,我们可以用(?<!exp),零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。 
 
十、注释: 
     (?#comment)        不对正则表达式产生影响,用于注释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值