正则表达式—matches()_find()_lookingAt()


matches():永远匹配整个字符串

find():是指找子串

matches() 和 find() 会相互影响,可以使用 reset 让它恢复到最初始的状态

lookingAt():每次都从头上还是找

使用 find() 方法

//matches_find_lookingAt


// matches():永远匹配整个字符串
// find():是指找子串
// matches() 和 find() 会相互影响,可以使用 reset 让它恢复到最初始的状态
// lookingAt():每次都从头上还是找


// 这一个类是了解使用( p(m.find()))   只用找一个和 \\d{3,5} 这个模式相匹配的子串  p(m.find());
// 没有使用匹配整个完整的字符串 p(m.matches());
// 这个的输出是true、true、true、true、false

public class Test5 {

	public static void main(String[] args) {
		// email(一般匹配email的方法)
		// \\w代表构成单词的字符
		// [\\w[.-]]+:构成单词的字符并且或者是.号或者是-线,后面+代表出现1次或多次
		// @[\\w[.-]]+:在@符号后面又是单词字符加上.和-,出现1次或多次
		// \\.[\\w]+:一个.号在跟单词的字符,出现1次或者多次
		p("asdfasdfsafsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
	
		// matches find lookingAt
		// \\d{3,5}:数字出现3次到5次
		Pattern p = Pattern.compile("\\d{3,5}");
		// 不匹配因为位数不一样(123-34345-234-00这里的位数大于5位了)
		String s = "123-34345-234-00";
		// 用\\d{3,5}这个模板去匹配这个字符串123-34345-234-00,匹配之后的结果放在Matcher m 里
		Matcher m = p.matcher(s);
		// matches():匹配整个字符串
		//p(m.matches());
		//m.reset();
		
		// m.find():找一个和 \\d{3,5} 这个模式相匹配的子串,是找子串而不是匹配整个字符串
		// m.find()找到一个子串p(m.find())就输出 true 或者 false
		// 123这个相当于就是一个子串,那么这样find这样就找到了第一次,
		// 找到第一个子串后整个正则表达式引擎会把第一个子串给去掉,
		// 然后当你继续m.find()时,它会从剩下的半截子串再去找
		p(m.find());
		
		p(m.find());
		
		p(m.find());
		
		p(m.find());
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}

使用 matches() 和 find()

//matches_find_lookingAt


//matches():永远匹配整个字符串
//find():是指找子串
//matches() 和 find() 会相互影响,可以使用 reset 让它恢复到最初始的状态
//lookingAt():每次都从头上还是找


// 这一个类是了解使用( p(m.matches())和p(m.find()))   匹配整个完整的字符串 p(m.matches())和 p(m.find());
// 这个的输出是true、false、true、true、false、false

// 输出上面结果的原因:(matches() 和 find() 会互相影响)
// 当我们用这个正则表达式(\\d{3,5})去匹配这个123-34345-234-00字符串的时候,
// 它首先从第一个字符然后开始往后找,当它找到123-这个位置的时候,它发现已经不匹配了,
// 当找前三个(123)的时候是匹配的,当找到第四个字符 - 的时候发现不匹配了,因为模式是要求数字的3到5个字符,这里是 - 不是数字,
// 所以正则表达式引擎分析到第四个字符的时候,发现整个字符串已经不匹配了,
// 它已经分析到第四个字符了,它不会往回吐(相当于把前面四个字符给吃掉了),
// 接下来调用m.find()的时候,它从第5个(34345-234-00)开始找了,
// 所以下面的第一个 m.find() 找到 34345,
// 第二个 m.find() 找到 234,
// 后面两个  m.find() 没有找到任何东西,
// 所以matches() 和 find() 会互相影响
public class Test5_1 {

	public static void main(String[] args) {
		// email(一般匹配email的方法)
		// \\w代表构成单词的字符
		// [\\w[.-]]+:构成单词的字符并且或者是.号或者是-线,后面+代表出现1次或多次
		// @[\\w[.-]]+:在@符号后面又是单词字符加上.和-,出现1次或多次
		// \\.[\\w]+:一个.号在跟单词的字符,出现1次或者多次
		p("asdfasdfsafsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
	
		// matches find lookingAt
		// \\d{3,5}:数字出现3次到5次
		Pattern p = Pattern.compile("\\d{3,5}");
		// 不匹配因为位数不一样(123-34345-234-00这里的位数大于5位了)
		String s = "123-34345-234-00";
		// 用\\d{3,5}这个模板去匹配这个字符串123-34345-234-00,匹配之后的结果放在Matcher m 里
		Matcher m = p.matcher(s);
		// matches():匹配整个字符串
		// 当我们用这个正则表达式(\\d{3,5})去匹配这个123-34345-234-00字符串的时候,
		// 它首先从第一个字符然后开始往后找,当它找到123-这个位置的时候,它发现已经不匹配了,
		// 当找前三个(123)的时候是匹配的,当找到第四个字符 - 的时候发现不匹配了,因为模式是要求数字的3到5个字符,这里是 - 不是数字,
		// 所以正则表达式引擎分析到第四个字符的时候,发现整个字符串已经不匹配了,
		// 它已经分析到第四个字符了,它不会往回吐(相当于把前面四个字符给吃掉了),
		// 接下来调用m.find()的时候,它从第5个(34345-234-00)开始找了,
		// 所以下面的第一个 m.find() 找到 34345,
		// 第二个 m.find() 找到 234,
		// 后面两个  m.find() 没有找到任何东西,
		// 所以matches() 和 find() 会互相影响
		p(m.matches());
		
		// m.find():找一个和 \\d{3,5} 这个模式相匹配的子串,是找子串而不是匹配整个字符串
		// m.find()找到一个子串p(m.find())就输出 true 或者 false
		// 例如:123这个相当于就是一个子串,那么这样find这样就找到了第一次,
		// 找到第一个子串后整个正则表达式引擎会把第一个子串给去掉,
		// 然后当你继续m.find()时,它会从剩下的半截子串再去找
		p(m.find());	// 第一个 m.find() 找到 34345
		
		p(m.find());	// 第二个 m.find() 找到 234
		
		p(m.find());	// 后面两个  m.find() 没有找到任何东西
		
		p(m.find());	// 后面两个  m.find() 没有找到任何东西
		
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}

使用 reset()

//matches_find_lookingAt


//matches():永远匹配整个字符串
//find():是指找子串
//matches() 和 find() 会相互影响,可以使用 reset 让它恢复到最初始的状态
//lookingAt():每次都从头上还是找


// 这一个类是了解使用(p(m.reset()))    匹配整个完整的字符串 p(m.matches())和  p(m.reset()) 以及 p(m.find())
// 这个的输出是true、false、true、true、true、false

// 输出上面结果的原因:(matches() 和 find() 会互相影响),而使用 m.reset() 会把原来吃掉的字符吐出来,恢复成正常的状态
// 当我们用这个正则表达式(\\d{3,5})去匹配这个123-34345-234-00字符串的时候,
// 它首先从第一个字符然后开始往后找,当它找到123-这个位置的时候,它发现已经不匹配了,
// 当找前三个(123)的时候是匹配的,当找到第四个字符 - 的时候发现不匹配了,因为模式是要求数字的3到5个字符,这里是 - 不是数字,
// 所以正则表达式引擎分析到第四个字符的时候,发现整个字符串已经不匹配了,
// 如果不使用 m.reset() , 那么它已经分析到第四个字符了,它不会往回吐(相当于把前面四个字符给吃掉了),
// 所以接下来调用m.find()的时候,它从第5个(34345-234-00)开始找了,
// 所以下面的第一个 m.find() 找到 34345,
// 第二个 m.find() 找到 234,
// 后面两个  m.find() 没有找到任何东西,
// 所以matches() 和 find() 会互相影响

// 如果使用 m.reset() , 它会把原来吃掉的字符吐出来,恢复成正常的状态
// 所以第一个 m.find() 找到 123,
// 第二个 m.find() 找到 34345,
// 第三个  m.find() 找到 234,
// 第四个  m.find() 找到 00
public class Test5_2 {

	public static void main(String[] args) {
		// email(一般匹配email的方法)
		// \\w代表构成单词的字符
		// [\\w[.-]]+:构成单词的字符并且或者是.号或者是-线,后面+代表出现1次或多次
		// @[\\w[.-]]+:在@符号后面又是单词字符加上.和-,出现1次或多次
		// \\.[\\w]+:一个.号在跟单词的字符,出现1次或者多次
		p("asdfasdfsafsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
	
		// matches find lookingAt
		// \\d{3,5}:数字出现3次到5次
		Pattern p = Pattern.compile("\\d{3,5}");
		// 不匹配因为位数不一样(123-34345-234-00这里的位数大于5位了)
		String s = "123-34345-234-00";
		// 用\\d{3,5}这个模板去匹配这个字符串123-34345-234-00,匹配之后的结果放在Matcher m 里
		Matcher m = p.matcher(s);
		// matches():匹配整个字符串
		// 当我们用这个正则表达式(\\d{3,5})去匹配这个123-34345-234-00字符串的时候,
		// 它首先从第一个字符然后开始往后找,当它找到123-这个位置的时候,它发现已经不匹配了,
		// 当找前三个(123)的时候是匹配的,当找到第四个字符 - 的时候发现不匹配了,因为模式是要求数字的3到5个字符,这里是 - 不是数字,
		// 所以正则表达式引擎分析到第四个字符的时候,发现整个字符串已经不匹配了,
		// 它已经分析到第四个字符了,它不会往回吐(相当于把前面四个字符给吃掉了),
		// 接下来调用m.find()的时候,它从第5个(34345-234-00)开始找了,
		// 所以下面的第一个 m.find() 找到 34345,
		// 第二个 m.find() 找到 234,
		// 后面两个  m.find() 没有找到任何东西,
		// 所以matches() 和 find() 会互相影响
		p(m.matches());
		
		// m.reset():请你把原来吃掉的字符吐出来,恢复成正常的状态
		m.reset();
		
		// m.find():找一个和 \\d{3,5} 这个模式相匹配的子串,是找子串而不是匹配整个字符串
		// m.find()找到一个子串p(m.find())就输出 true 或者 false
		// 例如:123这个相当于就是一个子串,那么这样find这样就找到了第一次,
		// 找到第一个子串后整个正则表达式引擎会把第一个子串给去掉,
		// 然后当你继续m.find()时,它会从剩下的半截子串再去找
		p(m.find());	// 所以第一个 m.find() 找到 123
		
		p(m.find());	// 第二个 m.find() 找到 34345
		
		p(m.find());	// 第三个  m.find() 找到 234
	
		p(m.find());	// 第四个  m.find() 找到 00
		
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}

使用 lookingAt()

//matches_find_lookingAt


//matches():永远匹配整个字符串
//find():是指找子串
//matches() 和 find() 会相互影响,可以使用 reset 让它恢复到最初始的状态
//lookingAt():每次都从头上还是找


// 这一个类是了解使用 p(m.lookingAt());
// 这个的输出是

public class Test5_3 {

	public static void main(String[] args) {
		// email(一般匹配email的方法)
		// \\w代表构成单词的字符
		// [\\w[.-]]+:构成单词的字符并且或者是.号或者是-线,后面+代表出现1次或多次
		// @[\\w[.-]]+:在@符号后面又是单词字符加上.和-,出现1次或多次
		// \\.[\\w]+:一个.号在跟单词的字符,出现1次或者多次
		p("asdfasdfsafsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
	
		// matches find lookingAt
		// \\d{3,5}:数字出现3次到5次
		Pattern p = Pattern.compile("\\d{3,5}");
		// 不匹配因为位数不一样(123-34345-234-00这里的位数大于5位了)
		String s = "123-34345-234-00";
		// 用\\d{3,5}这个模板去匹配这个字符串123-34345-234-00,匹配之后的结果放在Matcher m 里
		Matcher m = p.matcher(s);
		// matches():匹配整个字符串
		// 当我们用这个正则表达式(\\d{3,5})去匹配这个123-34345-234-00字符串的时候,
		// 它首先从第一个字符然后开始往后找,当它找到123-这个位置的时候,它发现已经不匹配了,
		// 当找前三个(123)的时候是匹配的,当找到第四个字符 - 的时候发现不匹配了,因为模式是要求数字的3到5个字符,这里是 - 不是数字,
		// 所以正则表达式引擎分析到第四个字符的时候,发现整个字符串已经不匹配了,
		// 它已经分析到第四个字符了,它不会往回吐(相当于把前面四个字符给吃掉了),
		// 接下来调用m.find()的时候,它从第5个(34345-234-00)开始找了,
		// 所以下面的第一个 m.find() 找到 34345,
		// 第二个 m.find() 找到 234,
		// 后面两个  m.find() 没有找到任何东西,
		// 所以matches() 和 find() 会互相影响
		p(m.matches());
		
		// m.reset():请你把原来吃掉的字符吐出来,恢复成正常的状态
		m.reset();
		
		// m.find():找一个和 \\d{3,5} 这个模式相匹配的子串,是找子串而不是匹配整个字符串
		// m.find()找到一个子串p(m.find())就输出 true 或者 false
		// 例如:123这个相当于就是一个子串,那么这样find这样就找到了第一次,
		// 找到第一个子串后整个正则表达式引擎会把第一个子串给去掉,
		// 然后当你继续m.find()时,它会从剩下的半截子串再去找
		p(m.find());	// 所以第一个 m.find() 找到 123
		
		p(m.find());	// 第二个 m.find() 找到 34345
		
		p(m.find());	// 第三个  m.find() 找到 234
	
		p(m.find());	// 第四个  m.find() 找到 00
		
		// lookingAt():是指每一次找的时候是从脑袋顶上开始找(是从开始的位置找),每次找都是开始位置
		// 这个正则表达式 123(三个字符所以符合)
		p(m.lookingAt());
		// 第二个还是看 123
		p(m.lookingAt());
		// 第三个还是看 123
		p(m.lookingAt());
		// 第四个还是看 123
		p(m.lookingAt());
	}
	
	public static void p(Object o) {
		System.out.println(o);
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值