很全的正则表达式用法
作者:互联网
转载:https://www.cnblogs.com/gisblogs/p/3955648.html
1。^/d+
/
/
匹
配
非
负
整
数
(
正
整
数
+
0
)
2
。
[
0
−
9
]
∗
[
1
−
9
]
[
0
−
9
]
∗
//匹配非负整数(正整数 + 0) 2。^[0-9]*[1-9][0-9]*
//匹配非负整数(正整数+0)2。[0−9]∗[1−9][0−9]∗ //匹配正整数
3。^((-/d+)|(0+))
/
/
匹
配
非
正
整
数
(
负
整
数
+
0
)
4
。
−
[
0
−
9
]
∗
[
1
−
9
]
[
0
−
9
]
∗
//匹配非正整数(负整数 + 0) 4。^-[0-9]*[1-9][0-9]*
//匹配非正整数(负整数+0)4。−[0−9]∗[1−9][0−9]∗ //匹配负整数
5。^-?/d+
/
/
匹
配
整
数
6
。
/
d
+
(
/
.
/
d
+
)
?
//匹配整数 6。^/d+(/./d+)?
//匹配整数6。/d+(/./d+)? //匹配非负浮点数(正浮点数 + 0)
7。^(([0-9]+/.[0-9][1-9][0-9])|([0-9][1-9][0-9]/.[0-9]+)|([0-9][1-9][0-9]))
/
/
匹
配
正
浮
点
数
8
。
(
(
−
/
d
+
(
/
.
/
d
+
)
?
)
∣
(
0
+
(
/
.
0
+
)
?
)
)
//匹配正浮点数 8。^((-/d+(/./d+)?)|(0+(/.0+)?))
//匹配正浮点数8。((−/d+(/./d+)?)∣(0+(/.0+)?)) //匹配非正浮点数(负浮点数 + 0)
9。^(-(([0-9]+/.[0-9][1-9][0-9])|([0-9][1-9][0-9]/.[0-9]+)|([0-9][1-9][0-9])))
/
/
匹
配
负
浮
点
数
10
。
(
−
?
/
d
+
)
(
/
.
/
d
+
)
?
//匹配负浮点数 10。^(-?/d+)(/./d+)?
//匹配负浮点数10。(−?/d+)(/./d+)? //匹配浮点数
11。1+
/
/
匹
配
由
26
个
英
文
字
母
组
成
的
字
符
串
12
。
[
A
−
Z
]
+
//匹配由26个英文字母组成的字符串 12。^[A-Z]+
//匹配由26个英文字母组成的字符串12。[A−Z]+ //匹配由26个英文字母的大写组成的字符串
13。2+
/
/
匹
配
由
26
个
英
文
字
母
的
小
写
组
成
的
字
符
串
14
。
[
A
−
Z
a
−
z
0
−
9
]
+
//匹配由26个英文字母的小写组成的字符串 14。^[A-Za-z0-9]+
//匹配由26个英文字母的小写组成的字符串14。[A−Za−z0−9]+ //匹配由数字和26个英文字母组成的字符串
15。^/w+
/
/
匹
配
由
数
字
、
26
个
英
文
字
母
或
者
下
划
线
组
成
的
字
符
串
16
。
[
/
w
−
]
+
(
/
.
[
/
w
−
]
+
)
∗
@
[
/
w
−
]
+
(
/
.
[
/
w
−
]
+
)
+
//匹配由数字、26个英文字母或者下划线组成的字符串 16。^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+
//匹配由数字、26个英文字母或者下划线组成的字符串16。[/w−]+(/.[/w−]+)∗@[/w−]+(/.[/w−]+)+ //匹配email地址
17。3+://匹配(/w+(-/w+))(/.(/w+(-/w+)))(/?/S)?
/
/
匹
配
u
r
l
18
。
匹
配
中
文
字
符
的
正
则
表
达
式
:
[
/
u
4
e
00
−
/
u
9
f
a
5
]
19
。
匹
配
双
字
节
字
符
(
包
括
汉
字
在
内
)
:
[
/
x
00
−
/
x
f
f
]
20
。
应
用
:
计
算
字
符
串
的
长
度
(
一
个
双
字
节
字
符
长
度
计
2
,
A
S
C
I
I
字
符
计
1
)
S
t
r
i
n
g
.
p
r
o
t
o
t
y
p
e
.
l
e
n
=
f
u
n
c
t
i
o
n
(
)
r
e
t
u
r
n
t
h
i
s
.
r
e
p
l
a
c
e
(
[
/
x
00
−
/
x
f
f
]
/
g
,
"
a
a
"
)
.
l
e
n
g
t
h
;
21
。
匹
配
空
行
的
正
则
表
达
式
:
/
n
[
/
s
∣
]
∗
/
r
22
。
匹
配
H
T
M
L
标
记
的
正
则
表
达
式
:
/
<
(
.
∗
)
>
.
∗
<
/
/
/
1
>
∣
<
(
.
∗
)
/
/
>
/
23
。
匹
配
首
尾
空
格
的
正
则
表
达
式
:
(
/
s
∗
)
∣
(
/
s
∗
//匹配url 18。匹配中文字符的正则表达式: [/u4e00-/u9fa5] 19。匹配双字节字符(包括汉字在内):[^/x00-/xff] 20。应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^/x00-/xff]/g,"aa").length;} 21。匹配空行的正则表达式:/n[/s| ]*/r 22。匹配HTML标记的正则表达式:/<(.*)>.*<///1>|<(.*) //>/ 23。匹配首尾空格的正则表达式:(^/s*)|(/s*
//匹配url18。匹配中文字符的正则表达式:[/u4e00−/u9fa5]19。匹配双字节字符(包括汉字在内):[/x00−/xff]20。应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function()returnthis.replace([/x00−/xff]/g,"aa").length;21。匹配空行的正则表达式:/n[/s∣]∗/r22。匹配HTML标记的正则表达式:/<(.∗)>.∗<///1>∣<(.∗)//>/23。匹配首尾空格的正则表达式:(/s∗)∣(/s∗)
- 正则表达式用例
- 1、^/S+[a-z A-Z]$ 不能为空 不能有空格 只能是英文字母
- 2、/S{6,} 不能为空 六位以上
- 3、^/d+$ 不能有空格 不能非数字
- 4、(.*)(/.jpg|/.bmp)$ 只能是jpg和bmp格式
- 5、^/d{4}/-/d{1,2}-/d{1,2}$ 只能是2004-10-22格式
- 6、^0$ 至少选一项
- 7、^0{2,}$ 至少选两项
- 8、4{20,}$ 不能为空 二十字以上
- 9、^/+?a-z0-9*@([a-z0-9]+(/.|/-))+[a-z]{2,6}$邮件
- 10、/w+([-+.]/w+)@/w+([-.]/w+)/./w+([-.]/w+)([,;]/s/w+([-+.]/w+)@/w+([-.]/w+)/./w+([-.]/w+)) 输入多个地址用逗号或空格分隔邮件
- 11、^(/([0-9]+/))?[0-9]{7,8}$电话号码7位或8位或前面有区号例如(022)87341628
- 12、5+@[a-z A-Z 0-9 _]+(/.[a-z A-Z 0-9 _]+)+(/,[a-z A-Z 0-9 _]+@[a-z A-Z 0-9 _]+(/.[a-z A-Z 0-9 _]+)+)*$
-
只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
- 13 ^/w+@/w+(/./w+)+(/,/w+@/w+(/./w+)+)* 上 面 表 达 式 也 可 以 写 成 这 样 子 , 更 精 练 。 1 4 / w + ( ( − / w + ) ∣ ( / . / w + ) ) ∗ / @ / w + ( ( / . ∣ − ) / w + ) ∗ / . / w + 上面表达式也可以写成这样子,更精练。 14 ^/w+((-/w+)|(/./w+))*/@/w+((/.|-)/w+)*/./w+ 上面表达式也可以写成这样子,更精练。14/w+((−/w+)∣(/./w+))∗/@/w+((/.∣−)/w+)∗/./w+
// 限定条件
final String CONDITION = “(?=.[a-z])(?=.[A-Z])(?=.*//d)”;
// 允许出现的字符
final String SPECIAL_CHAR = "[-A-Za-z0-9!$%&()/;<?{}//[//]^]";
// 数量
final String QUANTITY = "{8,16}";
1 楼的回复
(?=.[a-z]) 表示当前位置后面必须出现 .[a-z] 的字符,这个可以理解为必须出现小写字母。
或者可以理解为某一个字符间的缝隙必须满足的条件,这个仅仅作为条件判断并不能匹配任何字
符,因为这属于非捕获组中的环视(lookarround)零宽度匹配。
举个大家常见的例子:
表达式:Win(?=XP)
现有字符串 WinXP 和 WinNT,在应用这个表达式时前者能与之进行匹配,为什么呢?
当匹配器指示到 (?=XP) 时,也就是在 n 字母后面的缝隙,这个缝隙必须满足的
条件是:后面的字符必须是 XP,如果是的话,匹配成功,否则匹配失败。由于
(?=XP) 是匹配缝隙的,因此并不会把 XP 给匹配输出,而只输出了 Win 因此,这
个表达式的语义可以看作是:找到后面为“XP”字符所有的 Win。
假如,我们把表达式写成 Win(?=XP)(?=NT) 这样的话,那么这个语义是:找出后面
为“XP”并且为“NT”字符所有的 Win 可以想象,这是个
永远无法满足的匹配。(?=XP)(?=NT) 这个表示当前的缝隙必须同时满足的条件。
把这个表达式再改一下,改成 Win(?=.*XP)(?=.NT) 这个表示 Win 的后面必须出现
XP 与 NT,位置和顺序都是无关的(这主要是 . 的作用)。当然了这个表达式的效
率是比较低的,得向后进行两次断言。
如果字符串是 WincbaXPabcNT 这个字符串,当匹配指示器走到 n 后面的缝隙时开始
进行向后断言,首先对 .*XP 进行断言,很明显能将 cbaXP 匹配成功,这时第一个断
言完成,再对 .*NT 断言,可以看出 cbaXPabcNT 能与其匹配成功,这时第二个断言完
成,因此表达式 Win(?=.*XP)(?=.*NT) 能对 WincbaXPabcNT 进行匹配。
同理 WincbaNTabcXP 也是同样的效果。
如果能理解上面的这些,对于 (?=.[a-z])(?=.[A-Z])(?=.*//d) 这个的理应该不会
很难吧,这个只不过是必须同时满足三个条件。
这个表达式在开始部分就进行断言,即索引为 0 的地方,也就是第一个字符的前面的
缝隙,这个缝隙后面的字符必须满足 .[a-z] .[A-Z] .*//d 三个条件,也就是说
必后面必须出现至少一个小写字母、至少一个大写母、至少一个数字。
至于表达式 2 的使用,也就是 [ ] 内字符的转义需要注意一下。
^ 和 - 在 [ ] 结构的表达式中是有一定意义的。
[^abc] 表示除 abc 以外所有的字符,注意,这是放在最前面表示这个意思,
如果改成 [a^bc] 这个仅表示 a ^ b c 四个字符。如果需要匹配 ^ 这个字符
的话,千万不要把它放在第一个,如果一定要放在第一个的话,得使用转义符。
- 在 [ ] 表示字符的范围,比如 [a-z] 表示 a 与 z 之间的 26 个字母,
[a-zA-Z] 这个表示 a-z 和 A-Z 的 52 个字母。使用范围得注意了,如果写成
[z-a] 的话,在 Pattern.compile 编译表达式时会对范围进行检查,这时会产
生异常,因此在使用 - 范围时,后面的 Unicode 值必须大于等于前面的 Unicode
值。
如果要匹配“-”的话,尽量不要把 - 这个放在字符之间,可以放在 [ ] 的两边。
比如 [-a-z] 这就能匹配 26 个小写字母和“-”了。当然了,我们也可以写成
[a-z-A-Z] 这个可以匹配 52 字母和“-”,但是这样很不直观,我们宁愿写成
[a-zA-Z-] 或者 [-a-zA-Z] 这样。
2:不以某某开头 ,比如不以www开头
Java code
public class Test {
public static void main(String[] args) {
String[] strs = { “abc1232”, “wwwadsf”, “awwwfas”, “wwadfsf”, “”, “ww”, " ", “www” };
String regex = “(?
标签:regex,字符,匹配,String,正则表达式,Pattern,用法,很全,表达式 来源: https://blog.csdn.net/snail_bi/article/details/114078600