java基础之正则表达式

本文详细介绍了Java中正则表达式的使用,包括元字符、分组、常见正则表达式以及Pattern、Matcher类的使用。讲解了如何进行字符匹配、限定符、定位符操作,并提供了多个数字和字符的正则验证例子。
摘要由CSDN通过智能技术生成

regular expression:正则表达式,简写为RegExp,擅长用在文本格式匹配领域

1、正则表达式的元字符

1、转义字符"\"

在java中,用\\来表示转义字符,需要用到转义字符的符号有如下几个:==.*+()$/?[]^{}==但当这些符号在[]时,不需要转义。

2、字符匹配符
符号 含义 示例 解释 匹配输入
[] 可以接收的字符列表 [abcde] a、b、c、d、e中的任意一个字符
[^] 不接收的字符列表 [^abcde] 除a、b、c、d、e外的任意一个字符,包含特殊字符
- 连字符 A-Z 从A到Z之间的任意一个大写字母
. 匹配除\n以外的所有字符 a..b 以a开头,b结尾,中间包括两个任意字符的总长我4的字符串
\\d 匹配单个数字字符,相当于[0-9] \\d{3}(\\d)? 包括3个或4个数字的字符串 123、5678
\\D 匹配单个非数字字符,相当于[^0-9] \\D(\\d)* 以当个非数字字符开头,后接任意个数字字符串 a、A123
\\w 匹配单个数字、大小写字符、,相当于[0-9a-zA-Z] \\d{3}\\w{4} 以3个数字开头,后接数字或字母的长度为7的字符串 2351234、321hoh2
\\W 匹配单个非数字、大小写字母字符、,相当于[^0-9a-zA-Z] \W+\d{2} 以至少一个非数字、大小写字母字符开头,以两个数字字符结尾的字符串 *23、#33@?10
(?i) 其后锁接的字符串不区分大小写 (?i)abc 以abc为顺序的不区分大小写的字符串 AbC、abC、ABC、abc
(?i) 其后锁接的字符串不区分大小写 a((?i)b)c 以a开头,以c结尾,中间的b不区分大小写的字符串 只有两个,abc、aBc
\\s 任何空白字符(空格、制表符等)
\\S 除去任何空白字符(空格、制表符等),与\\s相反

说明:例如“abc”这种不带有表达式的匹配为全匹配,默认情况下,匹配是区分大小写的,解决不区分大小写的问题,除了用表达式实现之外,我们还可以在创建Pattern对象时指定,例如:Patternpattern=Pattern.compile(regStr,Pattern.CASE_INSENSITIVE*/);

3、选择匹配符
符号 含义 示例 解释 匹配输入
| |两侧的表达式存在或的关系 ab|bc 要么匹配ab,要么匹配bc
4、限定符

用于指定其前面的字符或组合项连续出现多少次

符号 含义 示例 解释 匹配输入
* 指定前面的字符重复0次或n次 (abc)* 包含连续任意个abc字符串 abcabc、abc
+ 指定前面字符串重复1次或n次(至少1次) m+(abc)* m出现至少一次,abc可以重复任意次 m、mabc、mabcabc、mmabcabc
? 指定前面的字符出现0次或1次 m+abc? 至少以1个m开头,后面接ab或abc的字符串 mab、mabc、mmmmab、mmabc
{n} 只能输入n个字符 [abcd]{3} 由a、b、c、d中任意组成的3个长度字符串 aaa、acd、bbd
{n,} 指定至少n个匹配 [abcd]{3,} 包含由a、b、c、d组成的,长度至少为3的字符串 abc、abdc、aabbccdd
{n,m} 指定前面的组合至少出现n次,但不多余m次 [abc]{2,3} a、b、c三个字符中任意组合成至少2个长度,最多3个长度的字符串 aa、aaa、abc、cb

注意,java的匹配是贪婪匹配,当有符合最长的匹配时,会优先匹配最长的,如果要使用非贪婪匹配,在限定符的后面加上?,即可让匹配规则变为非贪婪匹配。例如:a+?来匹配字符串aaaahoih1234hioh,会返回4个a,而不是1个aaaa。

5、定位符
符号 含义 示例 解释 匹配输入
^ 指定起始字符 ^[0-9]+[a-z]* 以至少一个数字开头,后接任意个小写字母的字符串 1、12345、1aaaa
$ 指定结束字符 ^[0-9]\\-[a-z]+$ 以一个数字开头,加上-,再以一个或多个小写字母结尾的字符串 1-a、2-abcd
\\b 匹配目标字符串的边界 abc\\b 这里说的字符串的边界是指子串间有空格,或者是目标字符串的结束位置 abcnnabc hoghaoabc
\\B 匹配目标字符串的非边界 abc\\B 这里说的字符串的边界是指子串间有空格,或者是目标字符串的结束位置 abcnnabc hoghaoabc

2、分组

捕获分组

常用分组构造形式 说明
(pattern) 非命名捕获。捕获匹配的字符串,编号为0的第一个捕获是由整个正则表达式模式匹配的文本,其他捕获结果则根据左括号的顺序从1开始自动编号
(?pattern) 命名捕获。将匹配的字符串捕获到一个组名称或者编号名称中,用于name的字符串不能包含任何标点符号,并且不能以数字开头,可以使用单引号替代尖括号,例如(?'name’pattern)

说明:使用了命名分组,可以使用编号来捕获组,也可以用name来捕获组
非捕获分组
在这里插入图片描述

3、常用正则表达式

要求 规则 表达式
汉字字符串 用16制编码范围来表示 ^[\u0391-\uffe5]+$
邮政编码 以1-9开头的六位数字 ^[1-9]\\d{5}$
QQ号 以1-9开头的5-10位数字 ^[1-9]\\d{4,9}$
URL "^((http
电子邮箱 只能有一个@,以a-zA-Z0-9-_开头,以com、cn等结尾 ^[\\w-]+@([a-zA-Z]\.)+[a-zA-Z]+$

一、校验数字的表达式

1 数字:1$
2 n位的数字:^\d{n}$
3 至少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零和非零开头的数字:^(0|[1-9][0-9]
)$
6 非零开头的最多带两位小数的数字:^([1-9][0-9])+(.[0-9]{1,2})?$
7 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$
8 正数、负数、和小数:^(-|+)?\d+(.\d+)?$
9 有两位小数的正实数:2+(.[0-9]{2})?$
10 有1~3位小数的正实数:3+(.[0-9]{1,3})?$
11 非零的正整数:4\d
$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
12 非零的负整数:^-[1-9][]0-9"$ 或 ^-[1-9]\d$
13 非负整数:^\d+$ 或 5\d*|0$
14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:^\d+(.\d+)?$ 或 6\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$
16 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$
17 正浮点数:7\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
18 负浮点数:^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
19 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$

二、校验字符的表达式

1 汉字:8{0,}$
2 英文和数字:9+$ 或 10{4,40}$
3 长度为3-20的所有字符:^.{3,20}$
4 由26个英文字母组成的字符串:11+$
5 由26个大写英文字母组成的字符串:12+$
6 由26个小写英文字母组成的字符串:13+$
7 由数字和26个英文字母组成的字符串:14+$
8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、数字包括下划线:15+$
10 中文、英文、数字但不包括下划线等符号:16+$ 或 17{2,20}$
11 可以输入含有^%&’,;=?KaTeX parse error: Can't use function '\"' in math mode at position 1: \̲"̲等字符:[^%&',;=?\x22]+
12 禁止输入含有的字符:[^\x22]+

三、特殊需求表达式

1 Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$
2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL:[a-zA-z]+://[^\s]
或 ^https://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$
4 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5 电话号码(“XXX-XXXXXXX”、“XXXX-XXXXXXXX”、“XXX-XXXXXXX”、“XXX-XXXXXXXX”、"XXXXXXX"和"XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 身份证号:
15或18位身份证:^\d{15}|\d{18}$
15位身份证:18\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
18位身份证:19\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
8 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):20[a-zA-Z0-9_]{4,15}$
10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):21\w{5,17}$
11 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.
\d)(?=.[a-z])(?=.[A-Z]).{8,10}$
12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
13 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
14 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
15 钱的输入格式:
16 1.有四种钱的表示形式我们可以接受:“10000.00” 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:22[0-9]$
17 2.这表示任意一个不以0开头的数字,但是,这也

  • 28
    点赞
  • 188
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值