Repository navigation
Expand file tree
/
Copy pathjava-正则.java
More file actions
145 lines (132 loc) · 4.01 KB
/
Copy pathjava-正则.java
File metadata and controls
145 lines (132 loc) · 4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
-------------------
正则表达式 |
-------------------
# 符合一定规则的表达式
# 用于专门操作字符串
# 用特定的符号来表示一些代码操作,简化了书写
Pattern
Matcher
-------------------
正则-匹配 |
-------------------
boolean matches("正则表达式的字符串");
# '任何字符串都可以调用该方法',如果匹配.返回 true,反之 false
public static boolean matches(String regex, CharSequence input) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
}
-------------------
正则-切割 |
-------------------
String[] split(String regex);
# 传递一个'正则表达式',
# ['DEMO']
//被匹配的字符串
String str = "zhansan lisi wangwu";
//正则表达式(代表一个或者多个空格)
String reg = " +";
//结果就是:zhangsanlisiwangwu 是根据正则(一个或者多个空格),来进行切割的
String[] result = str.split(reg);
//返回结果中就不包含-正则描述的字符串
# '.',该符号在正则表达式中表示'任意字符'.所有在切割String的时候需要转义:'\\.'
-------------------
正则-替换 |
-------------------
String replaceAll(String regex, String replacement);
# ['DEMO']
//用于执行正则的字符串
String str = "aaa000000aaa";
//用于替换的新字符串
String newStr = "#";
//正则表达式(匹配到连续超过5个的数字类型的字符串)
String reg = "\\d{5,}";
str = str.replaceAll(reg, newStr);
//结果就是:aaa#aaa 根据正则(连续超过五个数字类型的字符串),替换为指定的字符串
System.out.print(str);
-------------------
正则-获取 |
-------------------
# 把字符串中符合规则的数据取出来
1,先把正则表达式封装成对象
2,让正则对象和要操作的字符串相关联
3,关联后,获取一个叫做:'正则匹配引擎'
4,通过引擎对符合规则的子串进行操作(比如,取出)
API
Pattern
# 没有公共的构造函数,只有通过静态方法返回该类对象.
Pattern.compile(String reg);
* 根据正则表达式构建出 Pattern
Matcher matcher(CharSequence input)
* CharSequence 该类是字符序列接口.String 是它的子类.所以.可以直接放字符串、
* 创建匹配给定输入与此模式的匹配器
boolean matches(String regex, CharSequence input);
* 静态方法,第一参数正则.第二个参数字符串.如果匹配返回true.反之返回false
Matcher
# 传说中的引擎,也就是匹配器
boolean matches();
* 字符串是否满足指定的正则描述.其实 String 内部的那个 matches();底层就是它
boolean find();
* 进行一次匹配操作,如果有匹配成功的数据.那么就返回 true,否则返回 false
String group();
* 用于获取匹配操作后的结果,一次group();仅仅对上一次的find();有效
* 说白了,就是跟上面的相配合使用.一次find();返回true了.就可以执行一次grou();得到它匹配到的字符串
int end();
* 返回成功匹配到的子串的'结束偏移量'.(索引位置)
* '必须先执行了find();'
* 包含开头下标
int start();
* 返回成功匹配到的字串的'开始偏移量'.(索引位置)
* '必须先执行了find();'
* 不包含结束的下标
/*
* 用于被匹配的字符串
*/
String string = "aa aaa bbb ccc w aa a";
/*
* 使用构造函数,创建出:正则对象
* 该正则的描述:3个连续的英文字符串
*/
Pattern pattern = Pattern.compile("[a-z]{3}");
/*
* 让正则对象和要被操作的字符串相关联,获取--执行匹配操作的引擎(匹配器)
*/
Matcher matcher = pattern.matcher(string);
/*
* find();进行匹配迭代,如果成功匹配到一条数据,返回true
*/
while(matcher.find()){
/*
* 获取一次匹配的结果.也就是根据规则匹配出来的字符串
*/
String result = matcher.group();
/*
* 该串在父串中的开始角标
*/
int sta = matcher.start();
/*
* 该串在父串中的结束角标
*/
int end = matcher.end();
System.out.println("符合的字符串:"+result);
System.out.println("开始位置:"+sta+" 结束位置:"+end);
/*
结果--------------
符合的字符串:aaa
开始位置:3 结束位置:6
符合的字符串:bbb
开始位置:7 结束位置:10
符合的字符串:ccc
开始位置:11 结束位置:14
*/
}
String string = "aa aaa bbb ccc w aa a";
Pattern pattern = Pattern.compile("[a-z]{3}");
Matcher matcher = pattern.matcher(string);
while(matcher.find()){
String result = matcher.group();
int sta = matcher.start();
int end = matcher.end();
System.out.println("符合的字符串:"+result);
System.out.println("开始位置:"+sta+" 结束位置:"+end);
}