正则表达式入门
  正则表达式一直都是我畏惧的知识点,之前也尝试着学习,但最终还是放弃了。由于正则在项目中经常能用的到,所以最近强迫自己花空闲时间学习了些简单的正则知识,并将了解到的知识总结在本文中,希望对大家有所帮助。大家在学习正则的时候不要有畏惧的心理,其实正则入门还是比较容易的。
一、简介
 正则表达式是由原意文本字符(a,b,c,1,2,3等)和元字符( . * ? 等)组成来匹配指定内容的表达式。
原意文本字符
 原意文本字符是正则中最基本的字符,比如:
a在正则中表示匹配a这个字符;
1在正则中表示匹配1这个字符;
我在正则中表示匹配我这个字符。
元字符
 指在正则表达式中有特殊含义的专用字符,比如:
“.”表示匹配除换行\n以外的所有字符;
“*”表示匹配前面的子表达式0次或多次;
“?”表示匹配前面的子表达式1次或多次。
 常用的元字符:
元字符	含义	举例
\	转义字符,将后一个字符标记为特殊字符或将元字符转为原意字符	1、\\表示匹配原意字符\;
2、\.表示匹配英文句号“.”;
3、\d表示匹配数字。
.	匹配除换行(\n)以外的所有字符	abc.能匹配到“abc”后面的那个字符,比如“abc”后面的空格、字母、数字、汉字等
^	匹配字符串的开始位置,在集合([])中表示“非”	1、^\d\d\d能匹配“123”、“666”等,但不能匹配“a123”、“b123”、“-123”等;
2、^\w+\b表示匹配第一个单词;
3、[^ajl]匹配除了“a”、“j”、“l”以外的任意字符。
$	匹配字符串的结束位置	^\d\d\.\d\d$能匹配“12.01”和“00.00”等,但不能匹配“0.00”、“12.0”、“123.00”等
?	匹配前面子表达式0次或一次	good?可以匹配“goo”和“good”等,但是不能匹配“go”等
+		
*	匹配前面子表达式0次或多次	zo*能匹配“zo”、“zoo”、“zooo”
()	标记一个子表达式的开始和结束位置,其结束符号“)”是元字符	
[	字符组的起始符号,其结束符号“]”不是元字符	
{	标记限定符的开始,其结束符号“}”不是元字符	
|	表示“或”	1、a|b|c匹配“a”、“b”、“c”之中的一个;
 如果要匹配元字符本身可以用\来取消元字符的特殊含义,比如\.匹配英文句号”.”;\*匹配“*”本身;\+匹配“+”本身……
常用表达式举例
表达式	含义	举例
\w	匹配字母、数字、下划线	abc\w表示匹配“abc”开头并且后面跟着一个字母或数字或下划线的字符串
\W	匹配非字母、非数字、非下划线	\W相当于[^\w]
\d	匹配数字	\d\d\d表示匹配3个连续的数字
\D	匹配非数字	\D相当于[^\d]
\b	匹配单词的开始或结束	\bgo\w*\b表示匹配“go”开头的一个单词
\B	匹配非单词的开始或结束	\B相当于[^\b]
\s	匹配任何空白字符,如回车、空格、制表符等	\s相当于[\f\n\r\t\v]
\S	匹配任何非空白字符	\S相当于[^\s]
{n}	匹配前面子表达式n次	\d{11}表示匹配连续的11个数字
{n,m}	匹配前面子表达式n到m次	\d{7,11}表示匹配连续的7-11个数字
{n,}	匹配前面子表达式n次以上	\d{5,}表示匹配连续的5个以上的数字
[xyz]	表示字符集,匹配所包含的任意一个字符	1、[abc]能匹配“a”或“b”或“c”;
2、[!?*.]表示匹配“!”、“?”、“*”、“.”中的任意一个;
3、[^0-9]匹配所有非0到9的字符,相当于\D。
[a-z]	表示字符范围,能匹配范围内的任意一个字符	1、[a-z]能匹配26个小写字母中任意字母;
2、[0-9]能匹配0到9的任意数字,和\d一样的效果;
3、[1-9]能匹配1到9的任意数字;3、[\u4e00-\u9fa5]能匹配所有汉字。
(abc)	组合,将几个项组合成为一个单元,可以对这个单元使用限定符	(\.[a-z]+)+$可以匹配“.com”、“.net”、“.com.cn”等结尾的字符
运算符优先级
正则表达式是从左向右进行运算的,并遵循优先级顺序。优先级顺序如下表(先高后低):
运算符	优先权	说明
\	最高	转义字符
() (?:) (?=) []	高	圆括号和方括号
* + ? {n} {n,} {n,m}	中	限定符
^ $ \任何元字符 任何字符	低	定位点和序列(即:位置和顺序)
|	最低	选择符“或”
二、简单使用
  了解了正则表达式的基本语法后,我们就可以牛刀小试了,好记星不如烂键盘,多敲几遍就就不容易忘记,下面我们通过实例进行学习(注:正则比较灵活,没有标准的表达式,以下所有表达式仅供参考!)。
在编写正则时可以在站长工具进行正则测试
验证(^$)是否为手机号(中国)
  分析:由于号码段在不断更新,本文只验证“13”、“15”、“17”、“18”开头后面有9个数字的号码(如表达式1),大家可以根据自己的需求灵活修改(如表达式2)。
  表达式1:^(13|15|17|18)\d{9}$
  表达式2:^(13[0-9]|15[0-9]|17[07]|18[05689])\d{8}$
验证(^$)是否为电话号码(中国)
  电话号码一般为“区号[-]号码”的格式,如果区号部分是3位则号码部分为8位,如021-67678989、02167678989;如果区号部分是4位则号码部分是7位,如0765-6767676、02167678989。
  表达式1:^\d{3}-?\d{8}|\d{4}-?\d{7}$
  表达式2:^(\d{3}-?\d{8})|(\d{4}-?\d{7})$(由于选择符“|”优先级最低,所以组合符号“()”加与不加都行)
验证(^$)是否为邮箱
  邮箱一般为“名称@域名”的格式,由于名称部分格式太多(有些邮箱名称允许有中文)不好限制,所以本文只验证名称和域名有“英文字母”、“数字”、“下划线”、“中划线(-)”、“英文句号(\.)”的邮箱。
\w可以匹配“英文字母、数字、下划线”
\.可以匹配英文句号“ . ”
-可以匹配原意字符“ - ”本身
@可以匹配原意字符“ @ ”本身
([\.-]\w+)可以匹配“ photo-google ”中的“ -google ”、“ photo.google ”中的“ .google ”
(\.[a-zA-z0-9-]+)+可以匹配“ .com ”、“ .com.cn ”等
  表达式:^\w+([\.-]\w+)*@[\w-]+(\.[a-zA-z0-9-]+)+$
验证(^$)是否为身份证号码(中国)
  身份证号码是由18个字符组成,前17个必须为数字(\d),第一位不能为0([1-9]),最后一位可能是数字(\d)也可能是“x/X”([xX])。
  表达式:^[1-9]\d{16}[\dxX]$
匹配HTML中的a标签的链接
  a标签类似为“<a href="http://www.google.com/hk" target="_blank" >Google香港</a>”
  但是也可能会有如下等特殊的情况:
<a href=‘http://www.google.com/hk‘>Google香港</a>
<a target="_blank" href="http://www.google.com/hk">Google香港</a>
<a href ="http://www.google.com/hk">Google香港</a>
  经过分析得出如下表达式:
  表达式:<a[^>]+href[\s]*=[\s]*[‘"]([^"‘]*)[‘"]
匹配HTML中的img标签的图片地址
  匹配img标签和匹配a标签类似,只是标签名称和资源属性不同。
  表达式:<img[^>]+src[\s]*=[\s]*[‘"]([^"‘]*)[‘"]
三、总结说明
  本文只是入门教程,让你学习完后能使用基本的表达式进行匹配。如果学习正则的时候遇到问题,可以阅读下面的“参考文档”,这些文档写的非常详细,语言也更加严谨。由于本人也是刚学正则,文章里有错误的地方欢迎大家指正。
参考文档
1、维基百科——正则表达式
2、正则表达式 - 语法
3、正则表达式30分钟入门教程
点赞 5
————————————————
版权声明:本文为CSDN博主「Samuel_86」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/make164492212/java/article/details/51699545
原文:https://www.cnblogs.com/gaoyanbing/p/12696762.html