正则表达式

Posted zx931029

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式——语法

正则:就是用有限的符号,表达无限的序列。
两条斜线中间是正则主体,这部分可以有很多字符组成; i部分是修饰符,i的意思是忽略大小写。 eg: /^abc/i

简单字符:
没有特殊意义的字符都是简单字符,简单字符就代表自身,绝大部分字符都是简单字符。eg:
/abc/ // 匹配 abc
/123/ // 匹配 123
/-_-/ // 匹配 -_-
/孩子/ // 匹配 孩子

转义字符
是转义字符,其后面的字符代表不同的意思,转义字符主要有三个作用:
第一种,是为了匹配不方便显示的特殊字符,比如换行,tab符号等
第二种,正则中预先定义了一些代表特殊意义的字符,比如 w 等
第三种,在正则中某些字符有特殊含义(如下面的),转义字符可以让其显示自身含义

下面是常用转移字符列表:
匹配换行符
匹配回车符
匹配制表符,也就是 tab 键
v 匹配垂直制表符
x20 20是2位16进制数字,代表对应的字符
u002B 002B是4位16进制数字,代表对应的字符
w 匹配任何一个字母或者数字或者下划线
W 匹配任何一个字母或者数字或者下划线以外的字符
s 匹配空白字符,比如空格,tab等
S 匹配非空白字符
d 匹配数字字符,0-9
D 匹配非数字字符
 匹配单词的边界
B 匹配非单词边界
\ 匹配 本身

字符集合
有时候我们需要匹配一类字符,字符集可以实现这个功能,字符集的语法用 [] 分割:
[abc] // 匹配a或b或c

如果要表示字符很多,可以使用 - 表示一个范围内的字符:
[0123456789]=[0-9]

在前面加个 ^,可表示非的意思,下面的代码能够匹配 a b c 之外的任意字符
[^abc]

其实正则还内置了一些字符集,在上面的转义字符提到,下面给出内置字符集对应的自定义字符集
. 匹配除了换行符( )以外的任意一个字符 =[^ ]
w = [0-9a-zA-Z_]
W = [^0-9a-zA-Z_]
s = [ v]
S = [^ v]
d = [0-9]
D = [^0-9]

量词
如果需要匹配多次某个字符,正则也提供了量词的功能,正则中的量词有多个,如 ? + * {n} {m, n} {m, }
{n} 匹配 n 次,eg:a{2}, 匹配 aa
{m, n} 匹配 m-n 次,优先匹配 n 次,比如 a{1,3},可以匹配 aaa, aa, a
{m,} 匹配 m 次以上,优先匹配 多次,比如 a{1,},可以匹配 aaaa……
? 匹配 0 次或 1 次,优先匹配1次,相当于 {0,1}
+ 匹配 1-n 次,优先匹配n次,相当于{1,}
* 匹配 0-n次,优先匹配n次,相当于{0,}
正则默认是遵从贪婪模式,凡是表示范围的量词,都优先匹配上限而不是下限
a{1,3} // 匹配字符串“aaa”的话,会匹配aaa而不是a
有时我们想要结果,可以在量词后面加上?,就可以开启非贪婪模式
a{1,3}? // 匹配字符串“aaa”的话,会匹配a而不是aaa

字符边界
有时会有边界匹配的要求,比如xxx开头,以xxx结尾
^在[] 外表示匹配开头的意思
^abc // 可以匹配abc,打不能匹配aabc
$表示匹配结尾的意思
abc$ // 可以匹配abc,但不能匹配abcc
表示单词边界
abc // 可以匹配abc,但不能匹配abcc

选择表达式
有时我们想匹配x或y,如果x和y是单个字符,可以使用字符集,[abc]可以匹配a或b或c;
如果x和y是多个字符,字符集就无能为力了,此时要用到分组:
正则中用 | 来表示分组(或), a|b 表示匹配 a或者b的意思
123|456|789 // 匹配123 或 456 或 789

分组与引用
分组时正则中非常强大的一个功能,可以让上面提到的量词作用于一组字符,而非单个字符,分组的语法是圆括号包裹(XXX)
(abc){2} //匹配abcabc
分组不能放在[]中,分组中还可以使用选择表达式
(123|456){2} // 匹配123123,456456,123456,456123

和分组相关的另一个概念是引用,比如在匹配html标签时,通常希望<xxx></xxx>后面xxx能够和前面保持一致
引用的语法是数字,数字代表前面第几个捕获分组,注意非捕获分组不能被引用
<([a-z]+)></1> // 可以匹配‘<span></span>’或‘<div></div>‘等

预搜索
如果你想匹配xxx前不能是yyy,或者xxx后不能使yyy,js只能正向预搜索,也就是xxx后面必须是yyy,或者xxx不能是yyy
1(?=2) // 可以匹配12,不能匹配22
1(?!2) // 可以匹配22,不能匹配12

修饰符
默认正则是区分大小写,/xxx/gi // 后面的g和i就是两个修饰符
g 正则遇到第一个匹配的字符就会结束,加上全局修饰符,可以让其匹配到结束
i 正则默认是区分大小写的,i可以忽略大小写
m 正则默认情况下,^和$只能匹配字符串的开始和结尾,m修饰符可以让^和$匹配行首和行尾,eg:
/jing$/ // 能够匹配 ‘yanhaijing’,不能匹配 ‘yanhaijing ‘
/jing$/m //能够匹配‘yanhaijing’,能匹配 ‘yanhaijing ’
/^jing/ //能够匹配‘jing’,不能匹配‘ jing’
/^jing/m //能匹配‘jing’,能匹配‘ jing’

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

PHP 正则表达式总结

正则表达式

正则表达式

正则表达式“或“的使用

正则表达式 验证数字格式 非负数 小数点后保留两位 数字正则 double正则

JS正则表达式详解