半小时精通正则表达式-精华版
虽然毛票票以前发不过不少的正则表达式教程,但这篇文章还是不错的,无废话都是比较实际的,前提就是需要你之前懂点正则表达式,要不还是先看些基本的正则表达式教程比较好。
-------------------------------------------------------------------------
^和$分别用来匹配字符串的开始和结束
-------------------------------------------------------------------------
例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]//除了小写字母以外的所有字符
[^/^]//除了"/"和"^"字符之外的所有字符
[^"']//除了双引号(")和单引号(')之外的所有字符