正则表达式(一)

174 阅读3分钟

什么是正则表达式?

正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作,一般用于表单验证、Url映射等处。

语法:

/正则表达式主体/修饰符(可选)

元字符

元字符:有特定含义的字符,常见的元字符如下

代码说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思
$匹配字符串的结束

实例与详解:

(1). 匹配任何任意字符 例如 . 可以匹配 2,a,#,/,+ ,等

(2)\d\w\s\d 匹配第一个字符为数字,第二个字符为字母或数字、或下划线或汉字,第三字符为空格的字符串 例如:12(空格)6,6c(空格)8 , 1_ (空格) 8

(3)^\d\d\d$ 匹配三个全部都为数字的字符串 例如: 123,456,789;

还可以用于验证输入的字符串是否符合电话号码11位(身份证号)的验证 :例如:^\d{11}$ 匹配11位数字的电话号码,^\d{15}&匹配15位均为数字的身份证号

(4)\bcaptain\b 匹配单词Olive 例如: I'm captainbovi,captain of my own group.这个时候返回的是captain 而不是captainbovi,此时仅仅匹配和'captain'完全相同的单词。

反义字符

反义字符:用于查找除某个字符以外其他的任意字符(相比于元字符) 常用反义字符如下:

代码/语法说明
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^captin]匹配除了captin以外的任意字符

实例与详解: (1)\W    匹配除字母、数字、下划线、汉字以为的字符形如  /,%,-

(2)\S     匹配除空格以外的任意字符形如:1,@ ,),>

(3)[^captin]匹配除abcde以为的其他字符 如  b,d,e等

限定字符

限定字符:用于匹配重复次数 常用的限定字符如下

代码/语法说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

实例与详解: 在元字符(转义字符)后添加,用于修饰、限定 (1)\d* 匹配重复0次或多次数字 例如:1,23,(空)--为空或者为任意数字

(2)\d+ 匹配重复1次或多次数字 例如: 1,12,1234,12345等 --为1个或多个数字

(3)\d? 匹配重复0次个或者一次数字 例如:可能为空或者任意的一个数字(1,2,。。。)

(4)\d{8}匹配重复8次数字 例如:123456768

(5)\d{4,}匹配重复至少4次数字 例如:1234,12345,124244,。。。。。

(6)^\d{8,11}$ 匹配重复8-11次数字 例如:12345678,123456789,1234567891,12345678910

转义字符

需要匹配元字符时,需要对字符进行转义(你必须需要让别人看出你在使用元字符进行匹配),如 \d\w\s\d需要转义成 \d\w\s\d\,加斜杠。

字符分支

字符分枝:多用于满足不同情况的选择,用“|”将不同的条件分割开来,这样可以同时对多种情况进行匹配,比如座机号码有七位,有些有八位,这个时候可以采用字符分枝。例如:\d{7}|\d{8}  可以匹配两种不同长度区号的固定电话

字符分组

字符分组:多用于将多个字符重复,主要通过使用小括号()来进行分组,例如:(\d\w){2} ,重复两次(\d\w)

懒惰匹配、贪婪匹配

贪婪匹配:正则表达式中包含重复的限定符时,通常的行为是匹配尽可能多的字符。(默认情况下采用贪婪匹配)

懒惰匹配:与贪婪匹配相反,有时候需要匹配尽可能少的字符。

例如: a.b,它将会匹配最长的以a开始,中间字符为任意(也可以为空),最后以b结束的字符串。如果用它来搜索abc(b的话,它会匹配整个字符串a*bc(b。但是我们此时可能需要匹配的是ab这样的话就需要用到懒惰匹配了,懒惰匹配会匹配尽可能少的字符

常用的懒惰匹配限定符如下

代码/语法说明
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

不难发现,懒惰匹配就是在限定字符后增加?