正则表达式

目录

一、   正则表达式介绍  

      1.正则表达式的应用意义

        2.正则表达式的定义

       3.学习正则表达式

二、创建正则表达式

1.相关字符

2.相关解释

2.1

2.2给出某个位置上可以出现的多个字符

2.3 提前定义好的一些符号,可以代替上述的[]书写的范围

2.4边界匹配

2.5数量词

三、使用正则表达式 

(1)、校验数字的表达式

(2)校验字符的表达式

(3)特殊需求表达式


一、   正则表达式介绍  

      1.正则表达式的应用意义

      在开发中,通常很多数据都会使用String类存储。原因:操作字符  串的功能比较多,比较方便。在操作String类对象时,会经常遇到对字符串进行验证的功能,而按照我们之前学习的String类,我们使用String类中的诸多函数是可以完成对字符串校验功能的,但是代码相对来说比较麻烦,所以在Java中引入正则表达式的概念来解决上述问题,即简化代码。
正则表达式:专门用于操作字符串的技术,并且可以简化代码,用于对字符串的复杂操作。
正则表达式弊端:代码可读性比较差。

        2.正则表达式的定义

         正则表达式:正确的规则组成的一个表达式。其实就是用来简化字符串的操作。通过一些限定符号组成一种规则,来验证字符串是否符合规则
它的功能主要是用来对字符串进行各种的操作(验证、匹配、切割、替换,获取等)。
结论:正则表达式只能使用在字符串上。

       3.学习正则表达式

          主要是学习正则表达式中的常用符号。正则表达式是用我们所熟悉的 大括号、中括号 、小括号、字母 、数字、特殊符号等代替Java代码对字符串进行操作。

二、创建正则表达式

1.相关字符

       

 在这里插入图片描述

 在这里插入图片描述

 

 在这里插入图片描述

2.相关解释

2.1

x: 指的是普通字符,x代表的是未知数,代表着任何一个普通字符,举例x可以代表a,也可以代表b,同时也可以代表c等普通字符。
举例说明:"a[1-9][0-9]{4,11}"这里所写的a就是普通字符x中的一种,这时x就代表a,那么也就是说此正则表达式的第一位只能是普通字符a;
\ : 表示反斜线 例:“\” 在正则中就是“\”
\t :制表符。相当于tab键。

2.2给出某个位置上可以出现的多个字符


[ ]表示范围的意思。表示某一位上可以出现的字符数据,如果正则中需要匹配的某个字符串中某一位上的字符是唯一的,这时可以省略中括号。[]还有一个意思,在正则中还可以表示转义。
[abc] 表示要么是a要么是b还可以是c(只能是其中任意一个)
例:”NBA” 正则:”N[ABC]A” 匹配正确:NBA NAA NCA
[^abc] 当前要匹配的某个字符串中的某一位上不能是a或b 或c(除了a,b,c都可以)
[a-z] 表示26个小写字母
[A-Z] 表示26个大写字母
[a-zA-Z] 表示26个大小写字母
[a-d[m-p]] 当前要匹配的某个字符串中的某一位上 可以是a -d 或 m - p 的字符
[a-d&&[d-f]] 表示只能是d。必须在两个范围中都要符合。(交集)
[a-d&&[^d-f]] 表示只能是a,b,c
[a-z&&[^xyz]] 表示只能是除去x,y,z后的所有小写字母
[0-9] 表示0~9之间任意数字

2.3 提前定义好的一些符号,可以代替上述的[]书写的范围

·点 表示当前需要匹配的字符串位置上可以是任意的字符。例:以a开始后面可以是任意字符 “a.”
\d 表示数字。[0-9] 例:“A[\d]C” 表示A和C之间可以任意的0~9之间的数字。

说明:为什么在上述正则表达式“A[\d]C”中书写\d,而不是直接书写\d呢?
\d 代表着正则表达式中的一个符号,\和d放在一起代表0~9的十个数字。一旦将\d书写在””双引号中作为字符串,会出现一个问题,\就会把这个d转义了,一旦转义就不表示\d是一起的了,那怎么解决这种问题呢?
我们应该在\d前面在加一个,如:\d,第一个 \ 表示将第二个 \ 转义成普通的反斜线字符,而变成普通的反斜线之后和d组合就代表着正则中的数字,所以我们需要这样写:”\d” 等同于”[0-9]”
\\ 反斜线字符
\D 表示非数字。[^0-9]
\w 表示[a-zA-Z_0-9]。可以是任意数字、任意大小写字母、下划线。
\W 表示[^a-zA-Z_0-9]表示和\w相反。

2.4边界匹配

^ 表示行的开头 例:“^h.” 表示只能是以h作为开头
$ 表示行的结尾 例:”^h.o$” 表示只能以h作为开头,以o作来结尾

2.5数量词

三、使用正则表达式 

(1)、校验数字的表达式

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)$


(2)校验字符的表达式


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]+


(3)特殊需求表达式


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] 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$
4 手机号码:^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])\d{8}$ (由于工信部放号段不定时,所以建议使用泛解析 ^([1][3,4,5,6,7,8,9])\d{9}KaTeX parse error: Can't use function '\(' in math mode at position 93: …"和"XXXXXXXX):^(\̲(̲\d{3,4}-)|\d{3.…
6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 18位身份证号码(数字、字母x结尾):^((\d{18})|([0-9x]{18})|([0-9X]{18}))$
8 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):18[a-zA-Z0-9_]{4,15}$
9 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):19\w{5,17}$
10 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.\d)(?=.[a-z])(?=.[A-Z]).{8,10}$
11 日期格式:^\d{4}-\d{1,2}-\d{1,2}
12 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
13 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
14 钱的输入格式:
15 有四种钱的表示形式我们可以接受:“10000.00” 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:20[0-9]$
16 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9])$
17中文字符的正则表达式:[\u4e00-\u9fa5]
18 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
19 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
20 HTML标记的正则表达式:<(\S*?)[^>]>.?</\1>|<.? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
21 首尾空白字符的正则表达式:^\s|\s*KaTeX parse error: Expected group after '^' at position 3: 或(^̲\s*)|(\s*) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
22 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
23 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
24 IP地址:\d+.\d+.\d+.\d+ (提取IP地址时有用)
25 IP地址:((???:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值