正则表达式的学习笔记

元字符:

\b:代表单词的开头和结尾,也就是单词的分界。
.:匹配除了换行符以外的任意字符。
*:指定*前边的内容可以连续重复使用任意次数以使整个表达式达到匹配。可以是0次重复
+:重复一次或更多次,至少重复一次
?:重复1次或0次
{n}:重复n次
{n,}:重复n次或更多次
{n,m}:重复n到m次
\d:匹配一位数字。
\d{5}:{5}指定前边的\d连续匹配5次
\n:换行符
\s:匹配任意的空白符
\w:匹配字母或数字或下划线或汉字
\w{6}:六个字符
^:匹配要用来查找字符串的开始
$:匹配要用来查找字符串的结束
\d{5,12}:指定前边\d重复不少于5次不多于12次,匹配包含5到12连续位数字
^\d{5,12}$:匹配一个5到12位的字符串
\:转义,匹配.、/、*之类的字符
[aeiou]:[]匹配方括号里面的字符。此例匹配aeiou
[0-9]:[]号里面可以指定范围,例为匹配0到9之间的数字,相当于\d
[a-z0-9A-Z]:匹配字符,相当于\w
|:分枝,连接多个表达式规则,满足一个规则就可以匹配,注意顺序,匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。
():括号可以把表达式括起来形成子表达式,子表达式可以指定重复次数。
反义:
\W:任意不是字母数字下划线汉字的字符
\S:任意不是空白符的字符
\D:非数字字符
\B:不是单词开头或结束的位置
[^x]:除了x以外的任意字符
[^aeiou]:除了aeiou之外的任意字符
后向引用:用()括起来的表达式可以作为一个分组,每个分组默认有一个组号,从左到右分类为1,2,···,可以通过引用组号来引用()里面的表达式所匹配到的词。
\b(\w+)\b\s+\1\b:其中1代表的是前边()里面表达式捕获的内容。此表达式匹配的是: 一个至少为1个字母的单词 空格 前边那个单词 单词分界
分组命名:(?<name>\w+)  或(?'name'w\) 将\w+命名为name 引用被命名的分组:\k<name>
小括号的使用:
(exp):匹配exp并捕获文本到自动命名的组里
(?<name>exp):匹配exp并捕获文本到名称为name的组里
(?:exp):匹配文本并且放弃自动分组组号
(?=exp):匹配exp前边的位置
(?<=exp):陪陪exp后边的位置
(?!exp):匹配后边跟的不是exp的位置
(?<!exp):匹配前边不是exp的位置
(?#comment):无匹配,仅做注释使用
零宽断言:看不懂不看了
递归匹配:看不懂不看了、
贪婪与懒惰:正则表达式当存在接受重复限定词时默认匹配尽可能长的字符串,当我们需要的是匹配尽可能少的字符串时需要在*、+、?、{n,m}、{n,}后边加上?,即*?,+?,??,{n.m}?,{n,}?



注:如果不使用^和$的话,对于\d{5,12}而言,使用这样的方法就只能保证字符串里包含5到12连续位数字,而不是整个字符串就是5到12位数字。


例子:

查找hi:hi  匹配hi,HI,Hi,hI
精确地查找hi这个单词:\bhi\b
hi后边不远处跟着Lycy:\bhi\b.*\bLucy\b
以0开头,然后两个数字然后—然后8个数字:0\d\d-\d\d\d\d\d\d\d\d
以0开头,然后两个数字然后—然后8个数字:0\d[2]-\d[8]
以a开头的字母:\ba\w*\b
刚好6个字符的单词:\b\w{6}\b
要求QQ号必须为5到12位的数字:^\d{5,12}$
\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}:这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔
\(?0\d{2}[) -]?\d{8}:首先出现一次或0次(,然后一个0,接着两位数字,然后是出现1次或0次)或-,最后是8位数字。
(\d{1,3}\.){3}\d{1,3}:xxx.xxx.xxx.xxx x代表数字
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?):IP,ip格式为xxx.xxx.xxx.xxx,其中xxx不大于255
不含空白符的字符串:\S+
用尖括号括起来的以a开头的字符串:<a[^>]+>


常用的正则表达式:

匹配中文:[\u4e00-\u9fa5]
匹配双字节字符:[^\x00-\xff]
匹配空白行:\n\s*\r
匹配Email地址:[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
匹配URL:[a-zA-z]+://[^\s]*
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\{7,8}
匹配腾讯QQ号:[1-9][0-9]{4,}
匹配中国邮政编码:[1-9]\d{5}(?!\d)
匹配18位身份证号:^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
匹配(年-月-日)格式日期:([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))
匹配正整数:^[1-9]\d*$
匹配负整数:^-[1-9]\d*$
匹配整数:^-?[1-9]\d*$
匹配非负整数:^[1-9]\d*|0$
匹配非正整数:^-[1-9]\d*|0$
匹配正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
匹配负浮点数:^-[1-9]\d*\.\d*|-0\.\d*[1-9]\d*$


正则表达式在线测试工具:正则表达式在线测试

正则表达式学习教程:正则表达式教程





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值