半小时精通正则表达式-精华版
虽然毛票票以前发不过不少的正则表达式教程,但这篇文章还是不错的,无废话都是比较实际的,前提就是需要你之前懂点正则表达式,要不还是先看些基本的正则表达式教程比较好。
------------------------------------------------------------------------- ^和$分别用来匹配字符串的开始和结束 ------------------------------------------------------------------------- 例1^<b>开头一定要有"<b>"字符串; 例2</b>$结尾一定要有"</b>"的字符串; 例3^abc$以abc开头和以abc结尾的字符串,实际上是只有abc匹配 例4abc没符号就匹配包含abc的字符串 ------------------------------------------------------------------------- *+和?用来表示一个字符可以出现的次数或者顺序.他们分别表示 ------------------------------------------------------------------------- {0,}=*例1ab{0,}匹配以a开头后面B出现O-N次("a","ab","abb","abbbbbbbbbbbbbbbbb",无限...) {1,}=+例2ab{1,}匹配以a开头后面B出现1-N次("ab","abb","abbbbbbbbbbbbbbbbb",无限...) {0,1}=?例3ab{0,1}匹配以a开头后面B出现O-1次("a","ab") 例4a{0,1}b+$匹配以0个或者1个a再加上一个b结尾的字符串.("b","ab") 注(2种写法) ab{0,}也可以写成ab* ab{1,}也可以写成ab+ ab{0,1}也可以写成ab? a{0,1}b+$也可以写成a?b+$ (1)1要点,'*''+',和'?'只管控制它前面那个字符出现次数. 2{N,N}几到几次{0}O次 3{}这个内不能为负数 (2)次数是可以修改的 例5ab{2}要求a后面一定要跟两个b(一个也不能少)如("abb"); 例6ab{2,}要求a后面一定要有两个或者两个以上b如("abb","abbbb",等.); 例7ab{3,5}要求a后面可以有2-5个b("abbb","abbbb",or"abbbbb"). (3)后面跟多个字符用() 例8a(bc)*匹配a后面跟0个或者一个"bc";当然你也可以写成"a(bc){0,}" 例9a(bc){1,5}匹配1个到5个"bc." ------------------------------------------------------------------------- │相当于OR用来表示1个或者多个或者 ------------------------------------------------------------------------- 例1A│B匹配含有"A"或者"B"的字符串; 例2(A│B)C匹配含有"AC"或者"BC"的字符串; 例3(A│B)*C匹配含有(包括0-1个)a或b,后面跟一个c ------------------------------------------------------------------------- .可以代表所有的单一字符 ------------------------------------------------------------------------- .不包括"\n"空格如果有空格就用但空格加一字符[\n.]多个空格+1字符[\n\n\n\n\n\n.] 例1a.[0-9]一个a加一个字符再加一个0到9的数字 例2^.{3}$三个任意字符结尾 ------------------------------------------------------------------------- '[ab]'中括号括住的内容只匹配一个单一的字符 ------------------------------------------------------------------------- 例1[ab]匹配单个的a或者b(和"a│b"一样); 例2[a-d]匹配'a'到'd'的单个字符(和"a│b│c│d"还有"[abcd]"效果一样);一般我们都用[a-zA-Z]来指定字符为一个大小写英文 例3^[a-zA-Z]匹配以大小写字母开头的字符串 例4[0-9]%匹配含有形如x%的字符串 例5,[a-zA-Z0-9]$匹配以逗号再加一个数字或字母结尾的字符串 例6%[^a-zA-Z]%匹配含有两个百分号里面有一个(非)字母的字符串. 你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 要点1:^[内容]^在[]外开头,就表示以内容开头 要点2:[^内容]^在[]里开头,就表示排除里面的内容(^非的意思) 要点3:匹配含有这些字符的字符串.在中括号里[*\+?{}.]或者'符号将失效括号只匹配单一字符 要点4:[]中含有']'最好把它作为列表里的第一个字符(可能跟在'^'后面) 要点5:[]中含有有'-'最好把它放在最前面或者最后面,or或者一个范围的第二个结束点[a-d-0-9]中间的'-'将有效. ------------------------------------------------------------------------- \b和\B1匹配一个单词右边界2匹配非单词边界 ------------------------------------------------------------------------- 例1've\b':可以匹配love里的ve而不匹配very里有ve 例2'ov\B':可以匹配love里的ov而不匹配ovry里有ov ------------------------------------------------------------------------- \d和\D ------------------------------------------------------------------------- 例1\d匹配一个数字字符。等价于[0-9]。 例2\D匹配一个非数字字符。等价于[^0-9]。 ------------------------------------------------------------------------- \w和\W ------------------------------------------------------------------------- 例1\w匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]' 例2\W匹配包括下划线的任何非单词字符。等价于'[^A-Za-z0-9_]'。 ------------------------------------------------------------------------- 匹配非打印字符 ------------------------------------------------------------------------- 字符含义 \cx匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的'c'字符。 \f匹配一个换页符。等价于\x0c和\cL。 \n匹配一个换行符。等价于\x0a和\cJ。 \r匹配一个回车符。等价于\x0d和\cM。 \s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。 \S匹配任何非空白字符。等价于[^\f\n\r\t\v]。 \t匹配一个制表符。等价于\x09和\cI。 \v匹配一个垂直制表符。等价于\x0b和\cK。 ------------------------------------------------------------------------- 例子 ------------------------------------------------------------------------- 匹配首尾空白字符的正则表达式:^s*|s*$ 匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 匹配网址URL的正则表达式:[a-zA-z]+://[^s]* 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配国内电话号码:d{3}-d{8}|d{4}-d{7}匹配形式如0511-4405222或021-87888822920-209642-964 匹配腾讯qq号:[1-9][0-9]{4,}1+后面四为的数字开始,也就是10000 匹配中国邮政编码:[1-9]d{5}(?!d)中国邮政编码为6位数字 匹配身份证:d{15}|d{18}评注:中国的身份证为15位或18位 匹配ip地址:d+.d+.d+.d+评注:提取ip地址时有用 ------------------------------------------- ^$//开始到结尾 +//连续1-N个(连在一起的)(也就是-{1,}) -?//表示负和非负(也就是-{0,1}) [0-9]*//表示前面的位数0-N(也就是[0-9]{0,}) .?//表示有点或者无点 [^//非里面的内容 [a-z]//匹配所有的小写字母 [A-Z]//匹配所有的大写字母 [a-zA-Z]//匹配所有的字母 [0-9]//匹配所有的数字0-9的整数 [0-9.-]//匹配所有的数字,句号和减号 ------------------------------------------------ ^[a-zA-Z0-9_]+$//所有包含一个以上的字母、数字或下划线的字符串//举例子连在一起aA0_A001a_ ^[0-9]+$//所有的正数(也可以说是非负整数)//举例子345500687008099900999 ^-?[0-9]+$//所有的整数(包括负整数和整数)//举例子-43443或者43443 ^-?[0-9]*.?[0-9]*$//所有的小数(包括正副小数小数点前后的位数无限长)//举例子-10.00或者100000.0000 如果没小数点后面肯定没数字,所以前面加一个.?来判断是否有小数点,按道理说可以不需要.?是多余的 因为这个是专门判断小数的,如果没小数点了,还叫付数吗 [^a-z]//除了小写字母以外的所有字符 [^/^]//除了"/"和"^"字符之外的所有字符 [^"']//除了双引号(")和单引号(')之外的所有字符