-
-
[原创]Java正则表达式笔记总结
-
发表于: 2021-10-31 12:21 26337
-
最近做一个web探测的项目,在项目中多处用到java
正则表达式,今天将回顾的正则表达式做一个梳理,本文属于看完廖大佬笔记后的梳理,仅为平时参考,详细大家可以查看下面相关网址。
java正则表达式的学习参考以下学习资料即可:
(1)菜鸟教程:菜鸟教程的正则基础基本讲的很可以了
(2)廖雪峰的官方网站——Java篇:廖大佬的Java教程还是讲的非常清晰的
我们使用.
匹配一个任意字符
例如:正则表达式a.c
可以匹配"abc","a&c",a_c
等,但是它并不能匹配"ac"、"a&&c"
,因为.
匹配一个字符且仅限一个字符
我们使用\d
匹配0-9
这样的数字
例如:正则表达式00\d
可以匹配"007","008"
,它不能匹配"00A","0077"
,因为\d
仅限单个数字字符
我们使用\w
匹配一个字母、数字或下划线
例如:正则表达式java\w
可以匹配"javac","java9","java_"
,它不能匹配"java#","java"
,因为\w
不能匹配#
,空格等字符
我们使用\s
来匹配一个空格字符,注意空格字符不但包括空格,还包括tab
字符
例如:正则表达式a\sc
可以匹配a c
,但是不能匹配"ac","abc"
我们使用\D
来匹配一个非数字
例如:00\D
可以匹配"00A","00#"
同理我们使用\W
来匹配非(字母、数字或下划线)
我们使用\S
来匹配非空格的字符
我们结合单字符匹配+多字符匹配规则就可以匹配更多的字符
情况一:数字
情况二:电话号码
我们进行多行匹配时,用^
表示开头,$
表示结束
例如:正则表达式:^A\d{3}$
可以匹配"A001"、"A380"
我们用[]
可以匹配范围内的字符,例如[123456789]
或[1-9]
可以匹配1-9
情况一:电话号码(规定一个7-8数字电话号码不能从0开头)
情况二:任意6位十六进制数
我们在[]
中使用^
可以匹配不包含指定范围的字符
情况三:任意字符不包括数字
情况四:非负的整数和浮点数 或 非负浮点数
我们用|
连接两个正则是或规则
例如我们可以使用AB|CD
来匹配AB或CD
我们用()
将子规则括起来表示
例如 我们可以使用 learn\s(java|PHP|python)
来匹配 learn java、learn PHP、learn python
前面我们已经讲了()
的好处,假如我们需要取字符串中的特定位置值,就可以用到()
了,这里我们先学习一下正则匹配式的流程
Matcher API:
索引方法:
查找方法:
替换方法:
我们经常使用indexOf()
和substring
方法来进行字符串的提取,但是这样并没有通用性,我们可以使用()
解决
情况一:复杂字符串块提取
我们使用正则表达式(\d+)(0*)
去匹配"1230000"
,匹配的结果是"123000" 和 空,很显然和我们想要的结果不一致,这是因为\d+
就可以匹配0
如何使得\d+
尽量少匹配,让0*
尽量多匹配,我们必须让\d+
使用非贪婪模式,即\d+?
,结果变为(\d+?)(0*)
举例:
我们平时使用的String.split()
就是使用的正则表达式
例如:Set-Cookie:1234
我们平时使用substring()
来截取字符串
我们结合正则匹配:
我们平时使用replaceAll()
来替换字符串
本文是回顾java正则匹配式后的笔记梳理,后续会将比较好用的正则匹配式不断补充,仅为学习使用,也供大家参考,下面给大家分享一个好用的工具:精简编程助手
(
1
)数字
+
字母混搭 例如:
"AB380"
使用修饰符
*
匹配任意个数字符,正则表达式:
"AB\d*"
(
2
)数字
+
字母混搭 例如:
"AB380"
使用修饰符
+
匹配至少一个字符,正则表达式:
"AB\d+"
,无法匹配
"A"
,修饰符
+
可以匹配至少一个字符
(
3
)数字
+
字符混搭 例如:
"A"
"A0"
使用修饰符 ? 可以匹配
0
个或一个字符,正则表达式:
"A\d?"
,这里表示只匹配一个数字,
"A33"
就无法匹配了
(
4
)数字
+
字符混搭 例如:
"A380"
使用修饰符 {n} 可以精确指定n个字符
正则表达式:
"A\d{3}"
: 可以匹配
"A389"
"A\d{3,}"
:可以匹配至少
3
个数字
"A\d{2,3}"
:可以匹配
2
-
3
个数字
"A\d{0,3}"
:可以最多匹配
3
个数字
(
1
)数字
+
字母混搭 例如:
"AB380"
使用修饰符
*
匹配任意个数字符,正则表达式:
"AB\d*"
(
2
)数字
+
字母混搭 例如:
"AB380"
使用修饰符
+
匹配至少一个字符,正则表达式:
"AB\d+"
,无法匹配
"A"
,修饰符
+
可以匹配至少一个字符
(
3
)数字
+
字符混搭 例如:
"A"
"A0"
使用修饰符 ? 可以匹配
0
个或一个字符,正则表达式:
"A\d?"
,这里表示只匹配一个数字,
"A33"
就无法匹配了
(
4
)数字
+
字符混搭 例如:
"A380"
使用修饰符 {n} 可以精确指定n个字符
正则表达式:
"A\d{3}"
: 可以匹配
"A389"
"A\d{3,}"
:可以匹配至少
3
个数字
"A\d{2,3}"
:可以匹配
2
-
3
个数字
"A\d{0,3}"
:可以最多匹配
3
个数字
字符串:
"010-12345678"
"0755-7654321"
正则表达式:
"\d{3,4}-\d{7,8}"
字符串:
"010-12345678"
"0755-7654321"
正则表达式:
"\d{3,4}-\d{7,8}"
字符串:
"1234567"
正则表达式:[
1
-
9
]\d{
6
,
7
} 理解为:范围限定
+
正则
字符串:
"1234567"
正则表达式:[
1
-
9
]\d{
6
,
7
} 理解为:范围限定
+
正则
字符串:
"1A2b3c"
正则表达式:[
0
-
9a
-
fA
-
F]{
6
}
字符串:
"1A2b3c"
正则表达式:[
0
-
9a
-
fA
-
F]{
6
}
字符串:
"adhkADf"
正则表示式:[^
0
-
9
]{
7
}
字符串:
"adhkADf"
正则表示式:[^
0
-
9
]{
7
}
[
1
-
9
]\d
*
\.?\d
*
非负的整数和浮点数
0
\.\d
*
[
1
-
9
] 非负浮点数
[
1
-
9
]\d
*
\.?\d
*
非负的整数和浮点数
0
\.\d
*
[
1
-
9
] 非负浮点数
/
/
样例代码
String
str
=
"";
String reg
=
"";
/
/
设置正则匹配式
Pattern Pattern pattern
=
Pattern.
compile
=
Pattern.
compile
(reg,Pattern.CASE_INSENSITIV);
/
/
Pattern.CASE_INSENSITIV不区分大小
/
/
开始匹配
Matcher matcher
=
pattern.matcher(
str
)
/
/
判断是否找到
if
(matcher.matches()){
String whole
=
matcher.group(
0
);
String area
=
matcher.group(
1
);
String tel
=
matcher.group(
2
);
}
/
/
样例代码
String
str
=
"";
String reg
=
"";
/
/
设置正则匹配式
Pattern Pattern pattern
=
Pattern.
compile
=
Pattern.
compile
(reg,Pattern.CASE_INSENSITIV);
/
/
Pattern.CASE_INSENSITIV不区分大小
/
/
开始匹配
Matcher matcher
=
pattern.matcher(
str
)
/
/
判断是否找到
if
(matcher.matches()){
String whole
=
matcher.group(
0
);
String area
=
matcher.group(
1
);
String tel
=
matcher.group(
2
);
}