09.JavaAPI(正则表达式)

本文介绍的是通过String类中的matches方法传入正则表达式规则来解决问题。

一、为什么要使用正则表达式

        正则表达式可以大大简化文本识别工作,现已超出了某种语言或某个系统的局限,成为被人们广为使用的工具。

package com.zz.bookManager.test;

public class Test {
	public static void main(String[] args) {
		// 例子:账户 必须纯数字 范围6-12
		String username = "123456";
		if (username.length() >= 6 && username.length() <= 12) {
			boolean flag = true;// 可以
			for (int i = 0; i < username.length(); i++) {
				char chs = username.charAt(i);
				if (!Character.isDigit(chs)) {
					flag = false;
				}
			}
			if (flag == true) {
				System.out.println("OK");
			} else {
				System.out.println("不OK");
			}
		} else {
			System.out.println("账户有误,必须在6-12之间");
		}

		// 正则表达式
		String username2 = "123456abc";
		// 定义规则 通过字符串定义
		String regex = "[0-9]{6,12}";
		// 调用String类中提供的方法来匹配规则是否满足要求
		System.out.println(username2.matches(regex));

	}
}

二、正则表达式快速入门

2.1 概述

        正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的文字模式。该模式对文本查找时需要匹配的一个或多个字符串描述,给出一个匹配模板。

  • 正则表达式定义了字符串的模式。
  • 正则表达式可以用来搜索、编辑或处理文本。
  • 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

2.2 创建方式

String str = "123456";//字符串
String regex = "\\d{6}";//正则表达式
str.matches(regex);//是否匹配规则

2.3 正则表达式规则

符号

含义

示例

解释

匹配输入

\

转义符

\*

符号“*”

*

[  ]

可接收的字符列表

[efgh]

efgh中的任意1个字符

efgh

[^  ]

不接收的字符列表

[^abc]

abc之外的任意1个字符,包括数字和特殊符号

mq5、*

|

匹配“|”之前或之后的表达式

ab|cd

ab或者cd

abcd

(  )

将子表达式分组

(abc)

将字符串abc作为一组

abc

-

连字符

A-Z

任意单个大写字母

大写字母

符号

含义

示例

解释

匹配输入

不匹配输入

指定字符重复0次或n

(abc)*

仅包含任意个abc的字符串,等效于\w*

abcabcabcabc

aabca

+

指定字符重复1次或n

m+(abc)*

以至少1m开头,后接任意个abc的字符串

mmabcmabcabc

maabc

指定字符重复0次或1

m+abc?

以至少1m开头,后接ababc的字符串

mabmabcmmmabmmabc

ababcmabcc

{n}

只能输入n个字符

[abcd]{3}

abcd中字母组成的任意长度为3的字符串

abcdbcadc

aaadcbd

符号

含义

示例

解释

匹配输入

不匹配输入

{n,}

指定至少 n 个匹配

[abcd]{3,}

abcd中字母组成的任意长度不小于3的字符串

aabdbcaaabdc

acdbb

{n,m}

指定至少 n 个但不多于 m 个匹配

[abcd]{3,5}

abcd中字母组成的任意长度不小于3,不大于5的字符串

abcabcdaaaaabcdab

ababababa

^

指定起始字符

^[0-9]+[a-z]*

以至少1个数字开头,后接任意个小写字母的字符串

1236aa555edf

abcaaaa33

$

指定结束字符

^[0-9]\-[a-z]+$

1个数字开头后接连字符“–”,并以至少1个小写字母结尾的字符串

2-a3-ddd5-efg

33a8-7-Ab

符号

含义

示例

解释

匹配输入

不匹配输入

.

匹配除 \n 以外的任何字符

a..b

a开头,b结尾,中间包括2个任意字符的长度为4的字符串

aaabaefba35ba#*b

abaaaaa347b

\d

匹配单个数字字符,相当于[0-9]

\d{3}(\d)?

包含3个或4个数字的字符串

1239876

1201023

\D

匹配单个非数字字符,相当于[^0-9]

\D(\d)*

以单个非数字字符开头,后接任意个数字字符串

aA342

aaAA781234

\w

匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z]

\d{3}\w{4}

3个数字字符开头的长度为7的数字字母字符串

234abcd12345Pe

58aRa46

\W

匹配单个非数字、大小写字母字符,相当于[^0-9a-zA-Z]

\W+\d{2}

以至少1个非数字字母字符开头,2个数字字符结尾的字符串

#29#?@10

23#?@100

2.4 正则表达式举例

  • 非负整数:“^\d+$ ”
  • 正整数: “ ^[0-9]*[1-9][0-9]*$”
  • 非正整数: “ ^((-\d+)|(0+))$”
  • 整数: “ ^-?\d+$”
  • 英文字符串: “ ^[A-Za-z]+$”
  • 英文字符数字串: “ ^[A-Za-z0-9]+$”
  • 英数字加下划线串: “^\w+$”
  • E-mail地址:“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”
  • URL:“^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$”
package com.zz.bookManager.test;

public class Test {
	public static void main(String[] args) {
		// 【======正则示例======】
		String str = "";
		String regex = "";
		// 1、匹配密码:6位的数字
		str = "1234567";
		regex = "\\d{6}";
		System.out.println(str.matches(regex));
		// 2、匹配用户名:由英文字母组成 长度必须在10-20之间
		str = "adminadmin123";
		regex = "[a-zA-Z]{10,20}";
		System.out.println(str.matches(regex));
		// 3、由abcdefg以及02468组成 长度在6位以上

		// str = "abcabc";
		// regex = "[abcdefg02468]{6,}";
		regex = "[a-g02468]{6,}";
		System.out.println(str.matches(regex));

		// 4、匹配abcdefg 至少要选择一个
		str = "asd";
		regex = "[a-g]+";
		System.out.println(str.matches(regex));

		// 5、匹配abcdefg 选择一个 或者不选
		str = "a";
		regex = "[a-g]?";
		System.out.println(str.matches(regex));

		// 6、匹配出现任意次数的数字
		str = "ajld";
		regex = "\\d*";
		System.out.println(str.matches(regex));

		// 7、匹配正整数
		str = "+111111";// +12
		regex = "(\\+)?(\\d|[1-9]\\d*)";
		System.out.println(str.matches(regex));

		// 8、匹配负整数
		str = "0";
		regex = "\\-([1-9]|[1-9]\\d*)";
		System.out.println(str.matches(regex));

		// 9、匹配正整数和0
		str = "+0";
		regex = "((\\+)?(\\d|[1-9]\\d*))|0";
		System.out.println(str.matches(regex));

		// 10、匹配电子邮箱
		str = "1561868458@qq.cn";
		regex = "\\w{6,12}@\\w{2,5}\\.(com|cn)";
		System.out.println(str.matches(regex));

		// 11、匹配域名
		str = "www.baidu.com";
		regex = "(http://|https://|ftp://)?www\\.[0-9a-zA-Z]{3,6}\\.(com|cn|net|org)";
		System.out.println(str.matches(regex));

		// 12、匹配月份 1-12
		str = "12";
		regex = "[1-9]|1[0-2]";
		System.out.println(str.matches(regex));

		// 13、匹配日期 1-31
		// 1-9 10-29 30 31
		str = "22";
		regex = "[1-9]|[12]\\d|3[01]";
		System.out.println(str.matches(regex));

		// 14、匹配年龄 1-150岁之间
		str = "120";
		regex = "[1-9]|[1-9]\\d|1[0-4]\\d|150";
		System.out.println(str.matches(regex));
		// 15、匹配手机号码
		// (1)必须11位数
		// (2)必须是1开头 第二个数字:3 4 5 6 7 8 9
		str = "15084961293";
		regex = "1[3-9]\\d{9}";
		System.out.println(str.matches(regex));

		// 16、匹配座机号码

		// 区号---座机号---分机号
		// 0738-4565773-01
		str = "4565773";
		regex = "(0\\d{2,3}\\-)?\\d{7,8}(\\-\\d{1,2})?";
		System.out.println(str.matches(regex));

	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡独东执

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值