天天看点

正则表达式学习(一)认识正则表达式

正则表达式一直是我的弱项,平时项目里用到很多时候都是去网上查。所以趁项目完结系统的又重新学习了下。

我们来看一个正则表达式:

#<div\s+[^>]*>(.*?)<\/div>#i
           

一个完整的正则表达式如上,有三部分组成:分隔符、表达式、修饰符

①分隔符

除了字母、数字、下划线、空白符以外的任何字符,比如/、#、~、%、@等。比较常用的就是/、#和~,但是为了避免与反斜线混淆,一般不用/。

②表达式

表达式就是我们所写的匹配规则,由一些特殊字符和非特殊字符组成的。表达式包括元字符、字符组、分支、环视等一些正则表达式的元素。

③修饰符

可以理解为某种模式,比如i表示忽略大小写模式,U表示懒惰模式,s表示跨行匹配模式等等。

测试工具

学习正则表达式可以使用一个叫Regex  Tester的工具。网上搜一下就能找到。打开后是这样子的:

正则表达式学习(一)认识正则表达式

可以直接输入正则表达式,然后可以勾选相应的修饰规则,点Test,就可以得到匹配的结果。学习正则表达式用这个工具还是蛮方便的。

好了首先今天来一起学习下元字符,那什么是元字符呢?

元字符是正则表达式里具有特殊意义的专用字符,用来规定其前导字符在目标对象中的出现模式。比如\b表示英文单词的界定符,.表示任意一个除了换行符之外的字符。以下列出所有的元字符:

元字符 描述
. 匹配除换行符以外的任意一个字符
\w 匹配字母、数字、下划线、中文
\s 匹配任意空白符
\d 匹配数字
\b 匹配单词的开始或结束,或排除符
^ 匹配字符串的开始
$ 匹配字符串的结束
- 表示范围,用在字符组里
[] 匹配[]中的任意一个字符
* 匹配0个或多个
+ 匹配1个或多个
? 匹配0个或1个

下面举几个例子说明下:

①匹配html中所有的标签

#<\/?\w+[^>]*>#iU

这里<\/,/也可以是正则表达式的分隔符,为了避免歧义,用反斜线进行转义。

?表示包含/或者不包含,\w+表示匹配<>内的标签名称,[^>]这里表示匹配除了^的任意一个字符[^>]*表示匹配除了^的0个或多个字符

②匹配以a开头的单词

#\ba[a-zA-Z]*\b#

\b表示单词的界定符,[a-zA-Z]表示匹配大小写字母里的任意一个

③匹配地区号码,比如010-123456或(010)123456

#^\(?0\d{2}\)?-?\d{6}$#

其中^,$是开始和结束符,(和)之所以要转义,是因为()后面会讲它作为分支的符合,属于特殊字符。\d{2}表示匹配两个数字。

量词

上面我们看到有时会用到类似于{2}的匹配,这个正则中我们可以叫做量词。

量词有以下几个:

量词 描述
* 重复0次或多次
+ 重复1次或多次
? 重复0次或1次
{n} 重复n次
{n,} 重复n次以上
{n,m} 重复n次到m次

例如:

\d{2}匹配两个数字

\d{2,}匹配至少两个数字

\d{2,11}匹配2-11个数字