心如止水

心是静的,情是淡的,才能正确的品味人生……

您现在的位置是:主页 > 精品分享 > 技术分享 >

正则表达式(regular expression)

发布时间:2017-12-14 20:02编辑:风杀浏览(

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。
正则表达式语法:
两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。
      "^The":表示所有以"The"开始的字符串("There","The cat"等);
       "of despair$":表示所以以"of despair"结尾的字符串;
       "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;
       "notice":表示任何包含"notice"的字符串。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
       "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z".等价于 {1,}。
       "ab+":表示一个字符串有一个a后面跟着至少一个b或者更多;
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的 "does" 或 "doxy" 中的 "do" 。? 等价于 {0,1}。
       "ab?":表示一个字符串有一个a后面跟着零个或者一个b;
       "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
       "ab{2}":表示一个字符串有一个a跟着2个b("abb");
      "ab{2,}":表示一个字符串有一个a跟着至少2个b;
       "ab{3,5}":表示一个字符串有一个a跟着3到5个b。
*  + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
       <H1>介绍正则表达式</H1>
       /<.*>/
      贪婪:下面的表达式匹配从开始小于符号 (<) 到关闭 H1 标记的大于符号 (>) 之间的所有内容。
       /<.*?>/
       非贪婪:如果您只需要匹配开始和结束 H1 标签,下面的非贪婪表达式只匹配 <H1>。
|    指明两项之间的一个选择:
       "hi|hello":表示一个字符串里有"hi"或者"hello";
       "(b|cd)ef":表示"bef"或"cdef";
       "(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c";
.  匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。
      "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
      "^.{3}$":表示有任意三个字符的字符串(长度为3个字符);
[]  方括号表示某些字符允许在一个字符串中的某一特定位置出现:
       "[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b");
       "[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a|b|c|d"或者"[abcd]");
       "^[a-zA-Z]":表示一个以字母开头的字符串;
      "[0-9]%":表示一个百分号前有一位的数字;
       ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。
方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表示两个百分号中不应该出现字母)。注意在方括号中,不需要转义字符。
 
正则表达式后面的全局标记 g 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。
表达式的结尾处的不区分大小写 i 标记指定不区分大小写。
 
\b” :匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
\B”:匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
\cx”:匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
\d”:匹配一个数字字符。等价于[0-9]。
\D”:匹配一个非数字字符。等价于[^0-9]。
\f”: 匹配一个换页符。等价于\x0c和\cL。
\n”: 匹配一个换行符。等价于\x0a和\cJ。
\r”: 匹配一个回车符。等价于\x0d和\cM。
\t”: 匹配一个制表符。等价于\x09和\cI。
\v”: 匹配一个垂直制表符。等价于\x0b和\cK。
\s”: 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S”: 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
\w”: 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
\W”: 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
常用正则表达式:
 
//校验用户姓名:只能输入1-30个以字母开头的字串
/^[a-zA-Z]{1,30}$/
 
//校验密码:只能输入6-20个字母、数字、下划线
/^(\w){6,20}$/
 
//校验普通电话、传真号码:可以“+”或数字开头,可含有“-” 和 “ ”
/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/
可以匹配的字符串如:+123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999等
 
//email电子邮箱
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/
 
 
//校验URL
/^http[s]{0,1}:\/\/.+$/
/^http[s]{0,1}:\/\/.{1,n}$/
(表示url串的长度为length(“https://”) + n )
/^(http[s]?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
 
 
//检验ip地址
/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
 
//检验HTML 标签
/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
 
//Unicode编码中的汉字范围
/^[\u2E80-\u9FFF]+$/
 
//MAC地址的正则表达式
^([0-9A-F]{2})(-[0-9A-F]{2}){5}$