正则表达式—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);
}
}