正则表达式
1.快速入门
提取英文
提取数字
提取英文和数字
2.源码分析:
1.正则表达式中没有分组的情况
1 | import java.util.regex.Matcher; |
2.正则表达式中存在分组的情况
1 | import java.util.regex.Matcher; |
3.正则表达式语法
3.1元字符-转义符\1
需要用到转义符号的字符有: . * + ( ) $ / \ ? [ ] ^ { }
3.2元字符-字符匹配符
| 符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| [ ] | 可接收的字符列表 | [efgh] | e、f、g、h中的任意一个字符 |
| [ ^ ] | 不接收的字符列表 | abc | 除a、b、c之外的任意一个字符,包括数字和特殊符号 |
| - | 连字符 | A-Z | 任意单个大写字母 |
| . | 匹配除\n 以外的任何字符。如果要匹配.本身那就需要使用\\. | a..b | 以a开头,b结尾,中间包括2个任意字 |
| \\d | 匹配单个数字字符,相当于[0-9] | \\d{3}(\\d)? | 包含3个或4个数字的字符串 |
| \\D | 匹配单个非数字字符,相当于[^0-9] | \\D(\\d)* | 以单个非数字字符开头,后接任意个数字字符串 |
| \\w | 匹配单个数字、大小写字母、下划线字符,相当于[0-9a-zA-Z] | \\d{3}\\w{4} | 以3个数字字符开头的,长度为7的数字字母字符串 |
| \\W | 匹配单个非数字、大小写字母字符,相当于[^0-9a-zA-Z] | \\W+\\d{2} | 以至少1个非数字字母字符开头,2个数字字符结尾的字符串 |
| \\s | 匹配任何空白字符(空格、制表符等) | ||
| \\S | 匹配任何非空白字符(空格、制表符等) |
Java正则表达式默认是区分字母大小写的,如何实现不区分大小写?
1 | import java.util.regex.Matcher; |
或者:在创建正则表达式对象的时候就注入参数 (INSENSITIVE 不敏感的)1
Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);
3.3元字符-限定符
用于指定 其前面的字符 且只有距离最接近的符号才会生效,如果要多个符号生效就需要括号包含)和组合项连续出现多少次。
| 符号 | 含义 | 示例 | 说明 | 匹配输入 |
|---|---|---|---|---|
| * | 指定字符重复0次或n次(无要求) 0到多 | (abc)* | 仅包含任意个abc的字符串 | abc、abcabcabc |
| + | 指定字符重复1次或n次(至少一次) 1到多 | m+(abc)* | 以至少一个m开头,后接任意个abc的字符串 | m、mabcabc、mabcabc |
| ? | 指定重读0次或1次(最多一次) 0到1 | m+abc? | 以至少1个m开头,后接ab或abc的字符串 | mab、mabc、mmmab、mmabc |
| {n} | 只能输入n个字符 | [abcd]{3} | 由abcd中字母组成的任意长度为3的字符串 | abc、dbc、adc |
| {n,} | 指定至少n个匹配 | [abcd]{3,} | 由abcd中字母组成的任意长度不小于3的字符串 | aab、abcd、aaaaa、bcdab |
| {n,m} | 指定至少n个但不多于m个匹配 | [abcd]{3,5} | 由abcd中字母组成的任意长度不小于3,不大于5的字符串 | abc、abcd、aaaaa、bcdab |
3.4元字符-定位符
定位符,规定要匹配的字符串出现的位置 ,比如在字符串的开始还是结束的位置。
| 符号 | 含义 | 示例 | 说明 | 匹配输入 |
|---|---|---|---|---|
| ^ | 指定开始字符 | ^[0-9]+[a-z]* | 以至少1个数字开头、后接任意个小写字母的字符串,这是判断整个字符串,不是单个字符判断 | 123、6aa、555edf |
| $ | 指定结束字符 | ^[0-9]\\-[a-z]+$ | 以至少1个数字开头后接连字符”-“ 并以至少1个小写字母结尾的字符串 | 1-a |
| \\b | 匹配目标字符串的边界 | han\\b | 这里说的字符串的边界指的是被匹配的字符串的最后或者是空格的子字符串的后面,开头的不算 | hanshunping sphan nnhan |
| \\B | 匹配目标字符串的非边界 | han\\B | 和\\b的含义相反 | hanshunping sphan nnhan |
4.Matcher类
5.反向引用:
抛出需求:给你一段文本,请你找出所有四个数字连在一起的子串,并且这四个数字要满足
- 第一位与第四位相同
- 第二位与第三位相同
- 比如:1221 ,5775
圆括号的内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹
配模式,这个我们称为反向引用,这种引用既可以是在正则表达式内部,也可以是
在正则表达式外部,内部反向引用\\分组号,外部反向引用 $分组号
1 | //要匹配两个连续的相同数字: (\\d)\\1 |
String类中正则表达式的使用:
1 | public String replaceAll(String regex,String replacement); |
1 | public boolean matches(String regex); |
1 | public String[] split(String regex); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小温の博客!
评论











