什么是正则表达式
正则表达式(Regular Expression,简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式的性质
目的
对于给定的正则表达式和一串字符串,我们可以实现:
- 判断给定的字符串是否符合正则表达式的过滤逻辑(称为“匹配)
- 通过正则表达式,从该字符串中获取我们想要的特定部分
特点
- 灵活性、逻辑性和功能性非常强;
- 能够迅速地用极简单的方式达到对字符串的复杂控制;
- 应用的对象是文本,因此具备普适性
正则表达式符号
正则表达式通常由一些普通字符(characters)和元字符(metacharacters)组成。前者包含数字和大小写字母,后者则具有特殊的含义。下表为常用元字符及其含义。
元字符 | 描述 |
---|---|
\ | 将下一个字符标记为特殊字符、或原义字符、或向后引用、或八进制转义符。如\匹配\,\n匹配换行符,\n匹配字符\n |
^ | 匹配输入字行首,匹配开始标记 |
$ | 匹配输入行尾,匹配结束标记 |
* | 匹配前面的子表达式任意次,例如zo*匹配z及zo及zoo,等价于{0,} |
+ | 匹配前面的子表达式≥1次,例如zo+匹配zo及zoo,等价于{1,} |
? | 匹配前面的子表达式≤1次,例如do(es)?匹配do或does,等价于{0,1} |
{n} | n为非负整数,匹配确定的n次,例如o{2}不能匹配Bob中的o,但能匹配food中的两个o |
{n,} | n为非负整数,至少匹配n次,例如o{2,}不能匹配Bob中的o,但能匹配fooood中的所有o |
{n,m} | n≤m,均为非负整数,至少匹配n次,最多匹配m次,例如o{1,3}能将fooooood中前3个o为一组,后3个o为一组 |
案例
1.匹配邮箱格式,如test@wby.com
正确表达式:/\b[\w.%+-]+@[\w.-]+.[a-zA-Z]{2,6}\b/g
将其拆解成几个部分,解释如下:
- \b[\w.%+-] \b表示单词边界,[]内包含的表示匹配多项,\w表示匹配字母、数字、下划线,.%+-即对应的四种字符
- @[\w.-] @表示字符@,[]内包含的表示匹配多项,\w表示匹配字母、数字、下划线,.-即对应的字符
- .[a-zA-Z]{2,6}\b .表示字符转义(匹配字符.),[]内包含的表示匹配多项,a-zA-z表示所有大小写字母,{2,6}表示最少匹配2次,最多匹配6次,\b表示单词边界
- 其中,各部分间的+号表示至少匹配前面表达式一次,/.../g表示全域匹配
2.Django中的正则路由
某正则表达式:(?P\d{1,2})/(?P\w+)/(?P\d{1,2})
在正则表达式中,?P
- ?P
\d{1,2} 表示定义名为x的变量,符合条件:是一个一位或两位数 - ?P
\w+ 表示定义名为op的变量,符合条件:是一串字母、数字、下划线或其组合,+表示匹配至少一次 - ?P
\d{1,2} 表示定义名为y的变量,符合条件:是一个一位或两位数