一、什么是正则表达式?
正则表达式(Regular Expression) : 是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式本身也是一个字符串,这个字符串由两种字符组成:
普通字符 :例如大、小写英文字母;数字等。
元字符 :被系统赋予特殊含义的字符。例如:^表示以某个字符串开始,$表示以某个字符串结束。
1、边界符
符号 | 描述 | 注释 |
---|---|---|
^ | 开始符 | 按键为 Shift+6(如果放在[ ]里面表示取非,在linux中表示光标跳转到行首不为空的元素前) |
$ | 结束符 | 按键为Shift+4(如果在linux中,则表示当前行中的光标跳转到行尾) |
[ ] | 单字符 | 匹配一个字母 |
( ) | 分组 | 匹配这个表达式的字符保存到一个临时区域 |
- | 区间符 | 如:a-z、A-Z、0-9 等 |
2、转义符
符号 | 描述 | 注释 |
---|---|---|
\b | 匹配一个单词边界,大写B表示匹配非单词边界 | Break、打破,单词的边界 |
\w | 匹配包括下划线的任何单词字符。大写W类似[^A-Za-z0-9_] | Word、单词字符数字的组合 |
\d | 匹配一个数字字符,大写D类似[^0-9] | Digit、数字 |
\s | 匹配任何不可见字符,包括空格、制表符、换页符等等,S表示非空白符 | Space、空格 |
\t | 匹配一个制表符 | Table、制表符 |
\n | 匹配一个换行符 | NewLine、换行 |
\r | 匹配一个回车符 | Return、回车 |
3、计量符
符号 | 描述 | 注释 |
---|---|---|
* | 匹配前面的子表达式任意次 | (贪婪) 重复0次或更多次,eg:文件选择器 *.png |
+ | 匹配前面的子表达式一次或多次(大于等于1次)等价于{1,}。 | (懒惰) 重复1次或更多次(至少重复一次),eg:网页中的计数 1W+ |
? | 匹配前面的子表达式零次或一次。等价于{0,1}。 | (占位) 重复0次或者1次(可有可无),java中预编译语句集 |
{n} | 匹配确定的n次 | 重复n次 |
{n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次 | 重复n到m次(至少n次,至多m次) |
{n,} | n是一个非负整数。至少匹配n次。 | 重复n次躲着更多次(大于等于n次) |
4、逻辑符
符号 | 描述 | 注释 |
---|---|---|
| | 逻辑或 | 将两个匹配条件进行逻辑或(Or)运算 |
= | 逻辑等于(环视肯定顺序) | |
! | 逻辑非(环视否定顺序) | |
<= | 环视肯定逆序 | |
<! | 环视否定逆序 |
二、正则表达式引擎的内部工作机制
总是从左到右依次匹配
三、正则表达式的应用实例
- 匹配html标签: <[^>]+>
- 匹配中文字符 [\u4E00-\u9FA5]
- 验证用户名和密码:(”^[a-zA-Z]\w{5,15}$”)正确格式:”[A-Z][a-z]_[0-9]”组成,并且第一个字必须为字母6~16位
- 验证手机号码:^1[3|4|5|7|8][0-9]{9}$
java中的用法:
去掉url地址的后缀.actionString servletName=”http://localhost:8080/test/dopng.action;”
//第一个\表示转义字符\,第二个表示转义.,因为在正则表达式中一 个.表示任意字符
String url = servletName.replaceAll(“\\.action”,”“);
本文基于咕泡学院公开课视频所写