Java正则表达式、元字符、限定修饰符的使用

Java正则表达式的使用:

1、正则表达式是一个String对象的字符序列,该字符序列中的字符具有特殊意义,而这些特殊字符称为正则表达式中的元字符

2、String对象调用方法 public boolean matches(String regex),来判断当前 String对象 的字符序列 是否和 参数 regex 指定的正则表达式的字符序列匹配;

匹配则输出 true ;

不匹配则输出 false ;

如下代码↗:

import java.util.Scanner;
public class Regular_Expression {
	public static void main(String[] args) {
	      
		String regex = "\\dabc";   //元字符 \\d
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入匹配字符,并按enter键确认:");
		for(int i=0;i<=15;i++){
			
			String impo = sc.nextLine();
			
			if(impo.matches(regex)){
				System.out.println("字符匹配正确:"+impo);
			}else{
				System.out.println("字符匹配错误:"+impo);
			}
		}  //for语句结束

	}
}

代码中,regex = "\\dabc",\\d 就是元字符,代表意义是 0~9 中任意一个数字,而 abc 则是字符序列,只能输入 0abc、1abc、2abc、....、9abc 才匹配成功,当输入 10abc,aabc,+abc 都是错误的;

参数 regex 指定的正则表达式字符序列,一般可以包括:元字符,自定义字符序列,限定修饰符

如代码中的 "\\dabc" ,只包含了 元字符 \\d  ,自定义字符序列 abc ;


Java元字符的使用:

总结20种常见的元字符及其意义

常见元字符正则表达式中的用法所代表意义
..代表任何一个字符
\d\\d代表 0 ~ 9 中的任何一个字符 
\D\\D代表任何一个 非数字 的字符
\s\\s代表 空格类 字符,如 ‘\t’,‘\n’,‘\x0B’,‘\f’,‘\r’,空格
\S\\S

代表 非空格类 字符

\w\\w代表可用于 标识符 的字符(只包括 字母,数字,下划线)
\W\\W代表 非标识符 的字符(字母,数字,下划线以外的字符)
\p{Lower}\\p{Lower}代表 小写字母 a ~ z 中的任何一个字符
\p{Upper}\\p{Upper}代表 大写字母 A ~ Z 中的任何一个字符
\p{ASCII}\\p{ASCII}代表 ASCII码表 中的任何一个字符
\p{Alpha}\\p{Alpha}代表 字母 中的任何一个字符(大小写都可以)
\p{Digit}\\p{Digit}代表 0 ~ 9 中的任何一个字符 
\p{Alnum}\\p{Alnum}代表 字母 或 数字 中的任何一个字符(大小写都可以,0 ~ 9)
\p{Punct}\\p{Punct}代表 标点符号 中的任何一个字符(~ ! @ , . / ; ' [ \ ] ^ & % $ # 等等)
\p{Graph}\\p{Graph}代表 可视字符 ( \p{Alnum}  \p{Punct} 的整合 )
\p{Print}\\p{Print}代表 可打印字符  ( \p{Alnum}  \p{Punct} 的整合 )
\p{Blank}\\p{Blank}代表 空格 或 制表符 [\t]
\p{Cntrl}\\p{Cntrl}

代表 控制字符 (\x00-\x1F\x7F)

\u4E00-\u9FA5[\u4E00-\u9FA5]

代表 汉字 中的任何一个字符

***** 在正则表达式中,可以用 方括号[ ] 扩起 若干个字符 来表示 一个元字符,该元字符代表 方括号 中的任何一个字符;

例如: regex = "[157]abc",那么 [157] 就是一个元字符,代表的意义是 1 、 5 、 7 中任何一个字符;

以下是一些常用的 自定义元字符:

[a-z] 代表 小写字母 a 到 z 中的任何一个字符;

[^A-Z] 代表 非大写字母 A 到 Z 中的任何一个字符;(^ 代表相反,以外,即只要不是 A 到 Z 中的任何一个字符都可以)

[a-zA-Z] 代表 a 到 z 或 A 到 Z 中任何一个字符都可以;

[0-5] 代表 0 到 5 数字中任何一个字符;

此外,中方括号中可以嵌套另一个方括号,进行 并、交、差 运算:

并 运算:[0-5[a-z]]  代表 0 到 5 或 a 到 z 中的任何一个字符;与上面 [a-zA-Z]  是一样效果的 ;

交 运算:[a-z&&[abc]] 代表 a 到 z 的范围内,只能 是 a b c 中的任何一个字符 ;

差 运算:[a-z&&[^abc]] 代表 a 到 z 的范围内,不能 是 a b c 中的任何一个字符 ;

****** && 可以理解为  与  的意思;

例如:元字符  \\D  与  \\p{Lower} 的使用

如下代码↗:

import java.util.Scanner;
public class Regular_Expression {

	public static void main(String[] args) {
	      
		String regex = "\\D\\p{Lower}";   
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入匹配字符,并按enter键确认:");
		for(int i=0;i<=15;i++){
			
			String impo = sc.nextLine();
			if(impo.matches(regex)){
				System.out.println("字符匹配正确:"+impo);
			}else{
				System.out.println("字符匹配错误:"+impo);
			}
		}
		
     }
}

代码中,\\D 表示非数字的字符,所以第一个字符不能是数字,\\p{Lower}表示小写字母 a 到 z ,所以第二个字符只能是 a 到 z

代码输出结果:

请输入匹配字符,并按enter键确认:
Aa
字符匹配正确:Aa
AA
字符匹配错误:AA
A1
字符匹配错误:A1
1A
字符匹配错误:1A


需要特别注意的是:

元字符中 . 是代表任何一个字符,当想使用普通意义上的 . 字符时,需要使用  [.]  或者  \56  来表示;


Java限定修饰符:

总结8种常见的限定修饰符及其意义

限定修饰符的表示代表的意义
X?代表 X可以出现 0次1次
X*代表 X可以出现 0次多次
X+代表 X可以出现 1次多次
X{n}代表 X 只能 出现 n次
X{n,}代表 X 至少 出现 n次
X{n,m}代表 X可以出现 n 至 m 次
XY代表 X为前缀 Y为后缀
X|Y代表 X Y

限定修饰符的使用:

一、X? 代表 X可以出现 0次 或 1次

如下代码↗:

import java.util.Scanner;
public class Regular_Expression {

	public static void main(String[] args) {
	      
		String regex = "[a-z][A-Z]?";   //元字符 \\d
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入匹配字符,并按enter键确认:");
		for(int i=0;i<=15;i++){
			
			String impo = sc.nextLine();
			if(impo.matches(regex)){
				System.out.println("字符匹配正确:"+impo);
			}else{
				System.out.println("字符匹配错误:"+impo);
			}
		}
		
     }
}

代码中,"[a-z][A-Z]?" 的 [A-Z]? 代表 大写字母 A 到 Z 中任何一个字母可以出现 0次 或 1次 ;

代码输出结果:

请输入匹配字符,并按enter键确认:
a
字符匹配正确:a
aA
字符匹配正确:aA
aAB
字符匹配错误:aAB


二、X* 代表 X可以出现 0次多次

将以上代码改成 String regex = "[a-z][A-Z]*"; 

则 "[a-z][A-Z]*" 的 [A-Z]* 代表 大写字母 A 到 Z 中任何一个字母可以出现 0次 或 多次 ;

代码输出结果:

请输入匹配字符,并按enter键确认:
a
字符匹配正确:a
aA
字符匹配正确:aA
aAB
字符匹配正确:aAB


三、X+ 代表 X可以出现 1次多次

将以上代码改成 String regex = "[a-z][A-Z]+"; 

则 "[a-z][A-Z]+" 的 [A-Z]+ 代表 大写字母 A 到 Z 中任何一个字母可以出现 1次 或 多次 ;

代码输出结果:

请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aA
字符匹配正确:aA
aAB
字符匹配正确:aAB


四、X{n} 代表 X 只能 出现 n次

将以上代码改成 String regex = "[a-z][A-Z]{5}"; 

则 "[a-z][A-Z]{5}" 的 [A-Z]{5} 代表 大写字母 A 到 Z 中任何一个字母必须出现 5次 ;

代码输出结果:

请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aAB
字符匹配错误:aAB
aABCDE
字符匹配正确:aABCDE

aABCDEEE

字符匹配错误:aABCDEEE


五、X{n,} 代表 X 至少 出现 n次

将以上代码改成 String regex = "[a-z][A-Z]{5,}"; 

则 "[a-z][A-Z]{5,}" 的 [A-Z]{5,} 代表 大写字母 A 到 Z 中任何一个字母必须出现 5次 或 5次以上 ;

代码输出结果:

请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aAB
字符匹配错误:aAB
aABCDE
字符匹配正确:aABCDE

aABCDEEE

字符匹配正确:aABCDEEE


六、X{n,m} 代表 X可以出现 n 至 m 次

将以上代码改成 String regex = "[a-z][A-Z]{5,8}"; 

则 "[a-z][A-Z]{5,8}" 的 [A-Z]{5,8} 代表 大写字母 A 到 Z 中任何一个字母必须出现 5次 到 8次之间 ;

代码输出结果:

请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aAB
字符匹配错误:aAB
aABCDE
字符匹配正确:aABCDE

aABCDEEEEE

字符匹配错误:aABCDEEEEE


七、XY 代表 X为前缀 Y为后缀

将以上代码改成 String regex = "[a-z][A-Z]"; 

则 "[a-z][A-Z]" 的 [a-z] 为前缀 , [A-Z] 为后缀 ;

代码输出结果:

请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aAB
字符匹配错误:aAB
aA
字符匹配正确:aA

aa

字符匹配错误:aa


八、X|Y 代表 X Y

将以上代码改成 String regex = "[a-z]|[A-Z]"; 

则 "[a-z] | [A-Z]" 代表 可以是 a 到 z 中任何一个字符 ,也可以是 A 到 Z 中的任何一个字符 ;

代码输出结果:

请输入匹配字符,并按enter键确认:
a
字符匹配正确:a
aAB
字符匹配错误:aAB
A
字符匹配正确:A

aa

字符匹配错误:aa

 

 

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值