正则表达式

胡泽宇 2020年02月10日 82次浏览
正则表达式 是一个"字符串模板" 可以代表一批字符串
通配符
通配符每个通配符都只能代表一个字符
.代表任意一个字符
\d代表任意一个数字 digit
\D代表任意一个非数字
\w代表任意一个单词字符 word
\W代表任意一个非单词字符
\s代表任意一个空白 space
\S代表任意一个非空白字符
[a-f]范围:代表a/b/c/d/e/f其中任意一个字符
[awtg]枚举:代表a/w/t/g其中任意一个字符
[aq4-6]混合:代表a/q/4/5/6其中任意一个字符
[^a-f]求否:代表不是a/b/c/d/e/f其中一个字符
[a-g&&[^c-e]]求与:代表不是a/b/f/g其中任意一个字符
出现频率
出现频率描述例子
?前面的字符出现 0~1次a?b可以代表 b/ab
*前面的字符出现 0~N次a*b 可以代表 b/ab/a...ab(n个a)
+前面的字符出现 1~N次a+b 可以代表 ab/aab/aaab/a...ab(n个a)
{m,n}前面的字符出现m~n次
{m,}前面的字符出现m~无限次
{,n}前面的字符穿线0~n次
{n}前面的字符出现n次
开头结尾描述例子
^以它后面一个字符开头^\d 以数字开头
$以它前面一个字符结尾\d$ 以数字结尾
成组
(abc){1,2}可以代表: abc/abcabc
((abc)|(123))*可以代表 ""/abc123

((abc)*|(123)*) 可以代表 ""/abcabc/123123

例如:

\d*5            可以代表5/345/4564564565/484874455  只要末尾是5就可以  
[0-1]\*5        可以代表 5/005/0101011005  
\d+5            可以代表 45/55/5454545/86765
[0-1]+5         可以代表 05/15/00005/01101015
^0710-\d{11}$     代表0710-加11个数字开头 任意一个数字结尾的

Java对正则表达式的支持:

String类:
boolean matches(regex)  判断该字符串是否匹配正则表达式
String[] split(regex)   根据指定分隔符将字符串分割成多段
String replaceAll(regex ,replacement)   将regex匹配的内容,替换成后面的replacment

Pattern和Matcher类:
用于实现从文本中提取有效的信息,比如手机号码,提取之后随意使用。

Pattern方法:
static Pattern compile(regex)   将字符串形式的正则表达式编译成Pattern对象
Matcher matcher(str)    通过Pattern实例调用matcher(String str)返回Matcher对象

Mather方法:
boolean find()  返回是否找到匹配正则表达式的内容
String group()  提取符合正则表达式的内容

案例:在本地有个txt文件里面有一堆文字,提取出来电话号码,并依次打印出来。
步骤:

  • 定义正则表达式
  • 找到文件路径并创建File类
  • new一个Scanner类用来读取txt文件内容
  • 遍历每一行匹配正则表达式的输出来

文件:
1

完整代码及输出结果:
2