正则表达式:既是一种规则的表达式
作用:用于操作字符串 将用对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
学习正则表达式就是在学习 特殊符号的使用。
好处:可以简化代码的书写
坏处:阅读性比较差
正则表达式的构造摘
摘自 API1.6构造 | 匹配 |
---|---|
字符 | |
x | 字符 x |
\\ | 反斜线字符 |
\0n | 带有八进制值 0 的字符 n (0 <= n <= 7) |
\0nn | 带有八进制值 0 的字符 nn (0 <= n <= 7) |
\0mnn | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) |
\xhh | 带有十六进制值 0x 的字符 hh |
\uhhhh | 带有十六进制值 0x 的字符 hhhh |
\t | 制表符 ('\u0009') |
\n | 新行(换行)符 ('\u000A') |
\r | 回车符 ('\u000D') |
\f | 换页符 ('\u000C') |
\a | 报警 (bell) 符 ('\u0007') |
\e | 转义符 ('\u001B') |
\cx | 对应于 x 的控制符 |
字符类 | |
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] | d、e 或 f(交集) |
[a-z&&[^bc]] | a 到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) |
预定义字符类 | |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
具体操作功能:
1.匹配:String matches方法 用于规则匹配整个字符串 只要有一处 不符就匹配结束返回false
例:
public
static
void
main(
String[]
args) {
// TODO Auto-generated method stub
String
nub
=
"19";
//测试用字符
String
rul
=
"[1][9]";
//正则规则
String
rul1
=
"[1][7]";
//第二条正则规则
boolean
b
=
nub.
matches(
rul);
boolean
b1
=
nub.
matches(
rul1);
System.
out.
println(
b
+
" "
+
b1);
//一对一错进行比对
}
注:一个[ ]对应字符串中的一位。
有第一个[1]与字符串中第一位1对应所以继续匹配[9]与9匹配所以b返回true b1返回false
2.分割:String split方法 用于规则分割字符串
注: +表示一次或多次出现 我前面打了空格 代表 空格一次或多次出现
//.第一个/表示在字符串中的转义第二个表示正则表达式的转义
()表示组 .表示任意字符 /1表示引用第一个组
3.替换 String replaceAll方法 用于规则替换字符串

操作步骤:
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的字符串进行操作

有第一个[1]与字符串中第一位1对应所以继续匹配[9]与9匹配所以b返回true b1返回false
2.分割:String split方法 用于规则分割字符串
public
static
void
main(
String[]
args) {
// TODO Auto-generated method stub
String
s0
=
"Gandam Gandam_Z Gandam_ZZ";
//测试用字符串1 切多个空格
String
s1
=
"nihao,woshi,lihaiyun";
//测试2 切逗号
String
s2
=
"bbs.itheima.com";
//测试3 切特殊符号.
String
s3
=
"E:\\黑马程序员\\视频";
//测试4 切双反斜杠
String
s4
=
"qwerwwkfxxpoffaq";
//测试5 切双字符
String
rul0
=
" +";
String
rul1
=
",";
String
rul2
=
"\\.";
String
rul3
=
"\\\\";
String
rul4
=
"(.)\\1";
String[]
arr
=
s0.
split(
rul0);
show(
arr);
arr
=
s1.
split(
rul1);
show(
arr);
arr
=
s2.
split(
rul2);
show(
arr);
arr
=
s3.
split(
rul3);
show(
arr);
arr
=
s4.
split(
rul4);
show(
arr);
}
static
void
show(
String[]
x)
{
for(
String
test:
x)
{
System.
out.
println(
test);}}
}





注: +表示一次或多次出现 我前面打了空格 代表 空格一次或多次出现
//.第一个/表示在字符串中的转义第二个表示正则表达式的转义
()表示组 .表示任意字符 /1表示引用第一个组
Greedy 数量词 | |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
引用 | |
---|---|
\ | Nothing,但是引用以下字符 |
\Q | Nothing,但是引用所有字符,直到 \E |
\E | Nothing,但是结束从 \Q 开始的引用 |
3.替换 String replaceAll方法 用于规则替换字符串
public
static
void
main(
String[]
args) {
// TODO Auto-generated method stub
String
s0
=
"a1d3qw45646q4d56q1wd53s1a5wdq313";
s0
=
s0.
replaceAll(
"\\d+",
"a");
//将所有数字替换成a
System.
out.
println(
s0);
}
如果只是把数字替换掉可以去掉加号

String
s0
=
"a1d3qw45646q4d56q1wd53s1a5wdq313";
s0
=
s0.
replaceAll(
"\\d+",
"a");
//将所有数字替换成a
System.
out.
println(
s0);
s0
=
s0.
replaceAll(
"(.)\\1",
"$1");
//精叠词替换成一个
System.
out.
println(
s0);
$表示在正则表达式外获取组
4.获取:将字符串中的符合规则的字符串取出。
操作步骤:
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的字符串进行操作
public
class
maches {
/**
*
@param
args
*
@throws
ClassNotFoundException
*/
public
static
void
main(
String[]
args) {
// TODO Auto-generated method stub
String
s
=
"ming tian yao qu hei ma la";
String
rul
=
"\\b[a-z]{3}\\b";
Pattern
p
=
Pattern.
compile(
rul);
//将规则封装成对象
Matcher
m
=
p.
matcher(
s);
//让正则对象和要操作的字符串相关联
//其实String类中的matches方法,用的就是pattern和matcher对象来完成的。
//只不过是被封装了。用起来较为简单。
while(
m.
find())
{
System.
out.
println(
m.
group()
+
" "
+
m.
start()
+
"..."
+
m.
end());}
}
注:/b表示单词边界。find表示
将规则作用到字符串上,并进行符合规则的字串查找。
group表示
得到第一个符合规则正则的字串。并返回。start end表示得到
符合规则正则的字串的起始下标 和结束下标
正确使用正则表达式的方法
1.如果只想知道该字符是否对错 使用匹配
2.想要将已有的字符串变成另一个字符串 替换
3.想要按照自定义的方式将字符串变成多个字符串 用切割 获取规则以外的字符串
4.想要拿到符合要求的字符串 用获取 获取符合规则的字符串
总而言之正则表达式 作为字符串操作工具十分的便捷 就是时间格的久了 再看会比较麻烦 学起记得符合很多 但熟练以后会发现比起String里的方法好用多了 特便是简化代码方面。