专题—正则表达式

在这里插入图片描述

简单认识正则表达式的概念

//简单认识正则表达式的概念
public class Test {

	public static void main(String[] args) {
		// 简单认识正则表达式的概念
		// matches:String类里的方法(匹配)
		// abc是否符合(匹配)...
		// ...代表:一个点代表一个字符
		p("abc".matches("..."));
		
		// replaceAll:替代所有的
		// 把数字替换成 -
		// \\d:代表的为一位数字
		p("a8729a".replaceAll("\\d", "-"));
		
		// 要被匹配的模式
		// 匹配一个具有三个字符的字符串,而这个三个字符都是来自a-z的字母
		Pattern p = Pattern.compile("[a-z]{3}");
		// 匹配某一个字符串产生的结果
		// Matcher:匹配器
		// 用"[a-z]{3}"去匹配 fgh
		Matcher m = p.matcher("fgh");
		p(m.matches());
		
		// 上面三句话等于下面(建议使用三句话)
		p("fgh".matches("[a-z]{3}"));
		
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}

初步认识MetaCharacters(. * + ?)

//初步认识MetaCharacters
//初步认识. * + ?
public class Test1 {

	public static void main(String[] args) {
		// 简单认识正则表达式的概念
/*		p("abc".matches("..."));
		p("a8729a".replaceAll("\\d", "-"));
		Pattern p = Pattern.compile("[a-z]{3}");
		Matcher m = p.matcher("fgh");
		p(m.matches());
		p("fgh".matches("[a-z]{3}"));
		*/
		
		// 初步认识. * + ?
		// *:代表 0个或多个
		// +:代表 1个或多个
		// ?:代表 0个或1个
		// {3,100}:至少出现3,不超过100次
		// \\.代表 . 这个特殊字符
		// [ ](中括号代表一个范围)
		// [0-2][0-9][0-9]:第一个数字为第一位数字是0到2这个范围,第二个为0到9,第三个为0到9
		p("a".matches("."));
		p("aa".matches("aa"));
		p("aaaa".matches("a*"));
		p("aaaa".matches("a+"));
		p("".matches("a*"));
		p("aaaa".matches("a?"));
		// 零宽度匹配
		p("".matches("a?"));
		p("a".matches("a?"));
		p("214523145234532".matches("\\d{3,100}"));
		p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
		p("192".matches("[0-2][0-9][0-9]"));
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}

范围

// 范围
public class Test2 {

	public static void main(String[] args) {
		// 范围
		// [abc]:中括号里面所包含的字符代表的是取abc(中括号里的字符)中的某一个
		// 一个中括号[]代表匹配一个字符
		p("a".matches("[abc]"));
		// ^:代表取除了abc之外的字母
		p("a".matches("[^abc]"));
		// [a-zA-Z]:取小写的a到z或者大写的A到Z
		p("A".matches("[a-zA-Z]"));
		// [a-z]|[A-Z]和 [a-zA-Z]等同
		p("A".matches("[a-z]|[A-Z]"));
		// [a-z[A-Z]] 和 [a-z]|[A-Z]和 [a-zA-Z]等同
		p("A".matches("[a-z[A-Z]]"));
		// A到Z之中的并且是RFG之一的.
		p("R".matches("[A-Z&&[RFG]]"));
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}

认识 \s \w \d \

// 认识\s \w \d \
// \d:取0-9
// \D:除了0-9的值
// \s:找出空白字符
// \w:a-z或者A-Z或者包括_(下划线)或者0-9(用户注册时可以用)
public class Test3 {

	public static void main(String[] args) {
		// "\\s(4)":四个空白字符
		p(" \n\r\t".matches("\\s{4}"));
		
		// "\\S":非空白字符
		p(" ".matches("\\S"));
		
		// "\\w(3)":构成单词字符
		p("a_8".matches("\\w{3}"));
		 
		// [a-z]{1,3}:a-z的字母出现1到3次
		// \\d+:数字出现1次或者多次
		// [&^#%]+:&^#%这四者之一出现1次或多次
		p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));
		
		// 在java里必须用\\来代表一个(\)反斜线
		// \ + 一个字符  合在一起构成一个转义字符
		// matches("\\"):这么写会被正则表达式认为是一个反斜线,在正则表达式里面一个反斜线也是一个特殊字符,
		// 它会和后面的字符合在一起,因此双引号又没有匹配的了,所以要在正则表达式匹配一个反斜线写:matches("\\\\")
		// matches("\\"):写两个会报错(Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1)
		p("\\".matches("\\\\"));
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}

Boundary边界处理

在这里插入图片描述
// boundary(边界匹配)

// 边界匹配:指的是开头和结尾

// ^如果位于 [] (中括号里)为取反

// ^如果位于外面的话为 一行的起始位置(输入的开头)
在这里插入图片描述
$:The end of a line(一行的末尾)

// 边界处理
// 边界匹配:指的是开头和结尾
// *:代表 0个或多个
// +:代表 1个或多个
// ?:代表 0个或1个
public class Test4 {

	public static void main(String[] args) {
		// POSIX Style
		// \\p{Lower}:POSIX Style下的 a-z 表示
		p("a".matches("\\p{Lower}"));
		
		
		// boundary(边界匹配)
		// 边界匹配:指的是开头和结尾
		// ^如果位于[](中括号里)为取反
		// ^如果位于外面的话为 一行的起始位置(输入的开头)
		// ^h.*:表示开头的第一个字母为 h  . :代表一个字符    *:代表后面跟着0 个或者多个字符
		p("hello sir".matches("^h.*"));
		// .*ir$:以 ir 结尾前面有0个或者多个字符
		p("hello sir".matches(".*ir$"));
		// ^h[a-z]{1,3}o\\b.*:以h开头中间是a-z的出现1到3次,后面跟着的是一个o然后跟着一个单词边界(\\b)
		p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));
		// \\b:指的是一个单词的边界
		// hellosir这里面没有单词边界
		p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));
		
		
		// whilte lines
		// 一篇文章里面有多少个空白行(空格、Tab等等)
		// (^[\\s&&[^\\n]])开头的是一个空白字符并且这个空白字符它不是换行符,然后出现0次或多次,最后结束的是换行符(\\n$)
		p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));
		
		// .*\\d{4}. :0个或者多个字符跟着4位数字,4位数字后面有一个字符
		p("aaa .8888c".matches(".*\\d{4}."));
		// .*\\b\\d{4}. :0个或者多个字符,\\b代表单词边界,在4位数字前面有一个单词边界,4位数字后面有一个字符
		p("aaa 8888c".matches(".*\\b\\d{4}."));
		p("aaa8888c".matches(".*\\d{4}."));
		// aaa8888c 没有单词边界所以 false
		p("aaa8888c".matches(".*\\b\\d{4}."));
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值