正则表达式入门

近来常用到正则,避免眼盲直接从网络拷贝导致不能预料的错误,这里做简单了解。

一、

简单示例:
^once // 匹配那些以once开头的字符串;在[]内出现时表示'非'。例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配

bucket$ //以 bucket 结尾,与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。字符^和$同时使用时,表示精确匹配(字符串与模式一样)

用连字号可以表示一个字符的范围,中括号可以放置一个或多个字符,如:
[a-z] //匹配所有的小写字母 
[A-Z] //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[ \f\r\t\n] //匹配所有的白字符

花括号的三种不同的用法:
	一个数字 {x} 的意思是前面的字符或字符簇只出现x次 ;
	一个数字加逗号 {x,} 的意思是前面的内容出现x或更多的次数 ;
	两个数字用逗号分隔的数字 {x,y} 表示 前面的内容至少出现x次,但不超过y次
	^a{4}$   //匹配aaaa,跟在字符或字符簇后面的花括号 {} 用来确定前面的内容的重复出现的次数。
	^a{2,4}$ //匹配aa,aaa或aaaa
	^a{2,}$  //包含多于两个a的字符串
扩展到更多的单词或数字:
	^[1-9][0-9]{0,}$        // 所有的正整数 
	^\-{0,1}[0-9]{1,}$      // 所有的整数
	^[-]?[0-9]+(\.[0-9]+)?$   // 所有的浮点数
	最后一项说明:以一个可选的负号 ([-]?) 开头 (^)、跟着1个或更多的数字([0-9]+)、和一个小数点(\.)再跟上1个或多个数字([0-9]+),并且后面没有其他任何东西($)。
	特殊字符 ? 与 {0,1} 是相等的,它们都代表着: 0个或1个前面的内容 或 前面的内容是可选的
	特殊字符 * 与 {0,} 是相等的,它们都代表着 0 个或多个前面的内容
	字符 + 与 {1,} 是相等的,表示 1 个或多个前面的内容 
	所以上面例子也可以写成:
	^[1-9][0-9]*$        // 所有的正整数 
	^\-?[0-9]+$          // 所有的整数 
	^[-]?[0-9]+(\.[0-9]+)?$ // 所有的浮点数
/a.c/     //匹配aac、abc 等等,以及 a1c、a-c 、 a#c等。 句点 (.) 匹配字符串中的各种打印或非打印字符,只有一个字符例外,这个例外就是换行符 (\n)。

二、

特殊示例:
Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$ 
空白行的正则表达式:\n\s*\r (可以用来删除空白行)
腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)) 

三、

特殊字符:
+ 号代表前面的字符必须至少出现一次(1次或多次)
* 号代表字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)
? 问号代表前面的字符最多只可以出现一次(0次、或1次)
$ 匹配输入字符串的结尾位置
()标记一个子表达式的开始和结束位置
. 匹配除换行符 \n 之外的任何单字符
[ 标记一个中括号表达式的开始
? 匹配前面的子表达式零次或一次
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符
^ 匹配输入字符串的开始位置 
{ 标记限定符表达式的开始
| 指明两项之间的一个选择   //  x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
 

[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'、'l'、'i'、'n'
[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
\d 匹配一个数字字符。等价于 [0-9]
\D 匹配一个非数字字符。等价于 [^0-9]
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
\num 匹配 num,其中 num 是一个正整数。

优先级:
\ 转义符
(), (?:), (?=), []  圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \ 任何元字符、任何字符
| 替换,"或"操作

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值