正则表达式(Regular Expression)描述了一种字符串匹配的模式(pattern)一般用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则在表达式的两种语法:
- re = /pattern/[flags]
- re = new RegExp(“pattern”,[“flags”])
正则表达式的组件可以是:
- 单个的字符
- 字符集合
- 字符范围
- 字符间的选择
- 或者所有这些组件的任意组合
通过使用正则表达式可以:
- 测试字符串内的模式。
- 替换文本。
- 基于模式匹配从字符串中提取子字符串。
正则表达式的应用领域:
- c#
- java
- javascript
- linux/unix
- python
- PHP
- Ruby
1. 正则表达式的组成部分
- 普通字符(例如字符 a 到 z)
- 特殊字符(称为"元字符")
- 非打印字符
- 限定符
- 定位符
普通字符
普通字符:没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号
特殊字符
下表列出了正则表达式中的特殊字符:
非打印字符
下表列出了表示非打印字符的转义序列:
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配,一共6种,(注意:限定符只出现在范围表达式之后)见下表:
* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配(常用的 .*? )
定位符
定位符:能将正则表达式固定到行首或行尾。见下表:
注意:不能将定位符与限定符一起使用
选择
选择:用圆括号将所有选择项括起来,相邻的选择项之间用 | 分隔。
非捕获元:
- ?::用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用
- ?=:正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串
- ?!:负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串
反向引用
正则表达式中 “\number” 表示反向引用,表示引用一个捕获组,需要和小括号 “()” 一起使用。
学习地址
元字符
正则表达式的全局标记
- g:指定将表达式应用到输入字符串中能够查找到的尽可能多的匹配
- i:指定不区分大小写
- m:多行搜索模式(多行查找)
2. 正则表达式 运算符优先级
- 同级 从左到右
- 不同级 先高后低
下表从最高到最低说明了各种正则表达式运算符的优先级顺序:
3. 字符簇
在INTERNET的程序中,正则表达式通常用来验证用户的输入。当用户提交一个FORM表单以后,要判断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。所以要用一种更自由的描述我们要的模式的办法,它就是字符簇。
例如:要建立一个表示所有元音字符的字符簇,就把所有的元音字符放在一个方括号:[AaEeIiOoUu]
PHP的正则表达式有一些内置的通用字符簇,列表如下:
跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数:
4. 常用符号
- ?:通配符匹配文件名中的 0 个或 1 个字符,? 前面的字符最多只可以出现一次
- *:通配符匹配零个或多个字符,* 号前面的字符可以不出现,也可以出现一次或者多次
- ^:为匹配输入字符串的开始位置
- $:为匹配输入字符串的结束位置
- +:匹配一个或者多个,+ 号前面的字符必须至少出现一次
5. 常用正则表达式
- [0-9]:匹配单个数字
- [0-9]+:匹配多个数字
- [a-z]:匹配单个字母
- [a-z]+:匹配多个字母
- abc$:匹配字母 abc 并以 abc 结尾
- {n,m}:匹配n 到m个字符长度
- [ \f\r\t\n]:匹配所有的白字符
- [A-Z]:匹配所有的大写字母
- [a-zA-Z]:匹配所有的字母
- [0-9.-]:匹配所有的数字,句号和减号
- ^[a-z][0-9]$:匹配一个由一个小写字母和一位数字组成的字符串,比如"z2"、“t6"或"g7”,但不是"ab2"、“r2d3” 或"b52"的
- ^[a-zA-Z0-9_]{1,}$:所有包含一个以上的字母、数字或下划线的字符串
- ^[1-9][0-9]{0,}$:所有的正整数
- ^-{0,1}[0-9]{1,}$ // 所有的整数
- ^[-]?[0-9]+.?[0-9]+$ // 所有的浮点数
一些正则表达式示例:
校验数字的表达式:
校验字符的表达式:
特殊需求表达式:
参考内容:https://www.runoob.com/regexp/regexp-tutorial.html