一、什么是正则表达式
正则表达式是一种特殊的字符串模式,用于匹配一组字符串,可以检查一个串是否含有某个子串、将匹配的子串替或者从某个子串中提取符合某个条件的子串。就类似按图索骥,按照给定的某种规则去寻找并匹配目标。
1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。
二、正则表达式的介绍
正则表达式是由普通字符(如a-z,0-9,标点符号等)以及特殊字符(成为“元字符”)组成的文字模式。其表达式以双斜杠'//'包含正则匹配描述信息来表示,如:/^[0-9]+abc$/。
1、字符语义介绍。
#普通字符:没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
#非打印字符:
\cx x知名的控制字符,如\cM即为Control-M \f 换页符
\n 换行符 \r 回车符
\s 任何空白字符,等价于[ \f\n\r\\tv] \S 任何非空白字符,等价于[^ \f\n\r\\tv]
\t 制表符 \v 垂直制表符
#特殊字符:(使用反斜杠'\'进行转义后使用)
^:开始标记 $:结束标记
():子表达式的开始与结束位置,子表达式可供以后使用。
*:子表达式出现n次,n>=0 +:子表达式m次,m>=1
?:子表达式出现0或1次 .:匹配换行符之外的单个字符。
[]:中括号表达式,用于匹配取值范围,如[0-9]:取数范围0到9;[a-z]:取值范围a-z的字母。
{}:字符长度,如{3-15}:3-15个字符长度。
\:特殊字符转义符 |:两项间的选择。
#限定符:
*:匹配子表达式n次,n>=0 +:匹配子表达式m次,m>=1
?:匹配子表达式0或1次 {n}:匹配n次,n为非负整数
{n,}:至少匹配n次 {n,m}:匹配至少n次,至多m次。
#定位符:【不能将限定符与定位符一起使用】
^:字符串开始的位置 $:字符串结束的位置
\b:单词的边界 \B:非单词的边界
#元字符:
?:当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。如对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
(pattern):匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。
(?:pattern):匹配 pattern 但不获取匹配结果。
(?=pattern):正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。
(?!pattern):正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。
(?<=pattern):反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。
(?<!pattern):反向否定预查,与正向否定预查类似,只是方向相反。
x|y:匹配x或y
[xyz]:匹配xyz的字符
[^xyz]:匹配xyz以外的字符
[a-z]:a-z范围的任意字符
[^a-z]:a-z以外的任意字符
\d:匹配一个数字,等价于[0-9]
\D:匹配一个非数字,等价于[^0-9]
\w:匹配字母、数字、下划线,等价于'[A-Za-z0-9_]'
\W:匹配非字母、数字、下划线,等价于 '[^A-Za-z0-9_]'
\num:匹配一个正整数。
2、运算符优先级(下表优先级依次递减)
运算符 描述
\ 转移符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
| 替换,"或"操作
3、匹配规则
基本模式匹配:
字符簇:
确定重复出现:
参考文献:(文章仅做交流学习,侵权即删!!)