1. 正则表达式简介
1.1使用正则表达式的好处:
(1)一个正则表达式就是一个描述规则的字符串
(2)只需要编写正确的规则,就可以让正则表达式引擎去判断目标字符串是否符合规则
(3)正则表达式是一套标准,可以用于任何语言
(4)JDK内置正则表达式引擎:java.util.regex
1.2 如何编写正则表达式
(1)精确匹配:“a&c",特殊字符需要转义,匹配(a&c)
(2)非ASCLL字符,比如中文字符,我们要用"\u####表示
(3)特殊符号 . 可以匹配任意一个字符:例如“a.c"可以匹配"abc"、"adc"等等,不可以匹配“abdc”等
(4)符号 \d 可以匹配一个数字:例如"00\d"可以“003”、“004”等等,不可以匹配"0023"等
(5)符号\w 可以匹配一个字母、数字或下划线:例如“java\w”可以匹配“javac”、“java8”、“java_”等,不可以匹配“java#”等
(6)符号\s可以匹配一个空白字符:例如“A\sB”可以匹配“A B”,“A B”tab键也算空白字符等,不可以匹配“AB”、“A B”
(7)符号\D可以匹配一个非数字:例如“00\D”可以匹配“00A”、“00B”等,不可以匹配“001”、“002”等
(8)符号\W可以匹配一个非字母、数字或下划线:例如“java\W”
可以匹配“java!”、“java ”等,不可以匹配“javaw”,“java2”等
(9)符号\S可以匹配一个非空白字符:例如“A\SB”可以匹配“A&B”、“ABB”等,不可以匹配“A B”、“A B”tab键
(10)修饰符*可以匹配任意个字符:例如:“A\d*”可以匹配“A”、“A1”、“A007”等,不可以匹配“AB”
(11)修饰符 + 可以匹配至少一个字符:例如“A\d+”可以匹配“A1”、“A007”等,不可匹配“A”、“AB”
(12)修饰符?可以匹配零个或一个字符:例如“A\d?”可以匹配“A”、“A1”等,不可匹配“A12”、“AB”
(13)修饰符{ n }可以匹配n个字符:例如“\d{ 6 }”可以匹配“123456”、“999999”等,不可以匹配“12345”,“1234A”
(14)修饰符{ n ,m}可以匹配n-m个字符:例如“\d{3 , 5}可以匹配”123“、”12345“等,不可以匹配”12“、”123456“等
2. 分组
这是因为,正则表达式首先要编译成一个Pattern对象然后再进行匹配。
3. 复杂匹配规则
(1)^和KaTeX parse error: Undefined control sequence: \d at position 15: 匹配开头和结尾:例如:"^A\̲d̲{3}"可以匹配"A001"、“A999”等,不能匹配“A9999”、“B001”等
(2)[…]可以匹配范围内的字符:例如“[abc]1”可以匹配“a1”、“b1”、“c1,只能匹配范围内的一个字符,不可以匹配“ab1”、“x1”等。
还可以这样写“[a-f]1”可以匹配“a1”、“b1”、“f1”等,不可以匹配“g1”、“ab1”等
还可以这样写:“[a-f0-9]{6}”这样就就可以匹配a到f,0到9的六个字符的字符串,例如:“[a-f0-9]{6}”可以匹配“1a2b3c”、“ffffff”、等,不可以匹配“abc12”、“A0000F”等
还可以这样写:“[a-f0-9_]{6}”表示可以匹配0-9和a-f以及下划线这范围内的六个字符
[^…]可以匹配非范围内的字符:例如:“[^0-9]{6}”可以匹配非数字的六个字符
(3)AB|CD可以匹配AB或CD:例如“java|php”可以匹配java或php
例如“learn\s(java|php)”可以用来匹配learn java或learn php
如果去掉括号就只能匹配learn java或php了
4. 非贪婪匹配
(1)给定一个字符串表示的数字,判断该数字末尾0的个数
这里用?号来表示非贪婪匹配。
5. 使用正则表达式进行搜索和替换
反向引用