正则的使用总结

正则的使用总结

blog


1.一些常见的元字符

  • \b : 单词的开头或结尾, 也可称作单词的分界处. 一般单词使用的是空格或是标点符号来分隔单词,\b只是匹配一个位置,并不匹配单词分隔符中的任何一个.
  • . : 匹配除了换行符以外的任意字符.
  • * : 匹配在它之前的可以连续重复使用任意次用来使整个表达式得以匹配,代表的既不是字符也不是位置.(.*组合在一起是任意数量的不包含换行的字符).
  • + : 匹配重复1次或更多次(注意和*的区别).
  • \d : 匹配数字.
  • \w : 匹配字母或数字或下划线或汉字.
  • ^ : 匹配字符串的开始.
  • $ : 匹配字符串的结束.
  • \s : 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等.

2.常用的反义字符

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

3.常用的限定符

  • * : 重复零次或更多次.
  • + : 重复一次或更多次.
  • ? : 重复零次或一次.
  • {n} : 重复n次.
  • {n,} : 重复n次或更多次.
  • {n,m} : 重复n到m次.

4.分枝条件(|)

  • | 即管道,满足任意一种情况都可以匹配 (\d{5}-\d{4}|\d{5},美国邮政编码,5位数字或是使用-9位数字).

5.分组(())

  • () 即子表达式,指定子表达式重复的次数((\d{1,3}\.){3}\d{1,3},ip地址,更复杂的ip匹配((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?))

6.常用的分组语法

(1)捕获与非捕获
  • (exp) : 匹配exp,并捕获文本到自动命名的组里.
  • (?<name>exp) : 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp).
  • (?:exp) : 匹配exp,不捕获匹配的文本,也不给此分组分配组号.((?:exp)不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面,也不会拥有组号。)
(2)零宽断言(如\b,\^,$用于指定位置)
  • (?=exp) : 匹配exp前面的位置.(\b\w+(?=ing\b)匹配以ing结尾的单词的除ing以外的部分)
  • (?<=exp) : 匹配exp后面的位置.((?<=\bre)\w+\b匹配以re开头的单词除re以外的部分)
  • (?!exp) : 匹配后面跟的不是exp的位置.
  • (?<!exp) : 匹配前面不是exp的位置.
(3)注释
  • (?#comment) : 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读.

7.常见的等

  • \d = [0-9]
  • + = {1,}
  • * = {0,}
  • ? = {0,1}
  • \D = [^0-9]
  • \w = [A-Za-z_0-9]

8.match,exec,test,search,replace,split使用介绍

  • match 方法
    使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。
    stringObj.match(rgExp)
  • exec 方法
    用正则表达式模式在字符串中查找,并返回该查找结果的第一个值(数组),如果匹配失败,返回null。
    rgExp.exec(str)
  • test 方法
    返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式。
    rgexp.test(str)
  • search 方法
    返回与正则表达式查找内容匹配的第一个子字符串的位置(偏移位)。
    stringObj.search(rgExp)
  • replace 方法
    返回根据正则表达式进行文字替换后的字符串的复制。
    stringObj.replace(rgExp, replaceText)
  • split 方法
    将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
    stringObj.split([separator[, limit]])

ps: 参考了很多目前没有接触到的知识,有些很复杂的感觉需要后期再次阅读,暂不放进整理的文档里,正则按我的理解,匹配的那些都大同小异,我想,写的一手好正则的人必然是经历很深入的理解与实践才可以达成,目前在正则上的理解还是不太够的,平时实践的内容最多用在匹配字符串,数字这样简单的正则实践上,不过通过这几天断断续续的整理与思考,发现正则还是很有用处,以后再接触的正则,也必须时刻通过复习与更深刻的理解实践才行.

posted @ 2016-12-19 10:53  苏木槿  阅读(115)  评论(0编辑  收藏  举报