什么是正则表达式?
正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作,一般用于表单验证、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次以上,但尽可能少重复 |
不难发现,懒惰匹配就是在限定字符后增加?