一、正则表达式的入门:
学习目标:
了解正则表达式
学习过程:
1.概念:“正则表达式”(Regular Expression)就是一个特殊的字符串,用来匹配字符串与查找字符串
2.java基础架包中: java.util.regex 包主要由三个类所组成:Pattern、Matcher 和 PatternSyntaxException。
实例:判断字符串是否以ax开头by结尾,并且中间有仅只有一个字符
public class Test {public boolean m1(String str) {
// 方式一:// Pattern p = Pattern.compile("ax.by");// Matcher m = p.matcher(str);// boolean b = m.matches();
// 方式二boolean b = Pattern.matches("ax.by", str);return b;}public static void main(String[] args) {Test t = new Test();System.out.println(t.m1("axmby"));}}
说明:
提示1:正则表达式还可以在字符串中查找匹配的子字符串; 在其它类中的使用.....。(后面章节会讲到)提示2:- Pattern 对象表示一个已编译的正则表达式。Pattern 类没有提供公共的构造方法。 必须调用公共的静态 compile 方法,它将返回一个 Pattern 对象。- Matcher 是一个靠着输入的字符串来解析这个模式和完成匹配操作的对象。 Matcher 也没有定义公共的构造方法,需要通过调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。- PatternSyntaxException 对象是一个未检查异常,指示了正则表达式中的一个语法错误。
二、正则表达式的组成规范学习目标:
正则表达式通配符
学习过程:
一、匹配字符的通匹符
1、"." ---> 用于匹配一个任意的字符串比如: “t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”
2、"[]" --->为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符:
3、"|"--->如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”, 它的作用与算术表达式中的作用是一样的,表示一个整体。
4、“-”与表示数字或字母的范围,[0-9]表示0到9中的其中一个字符,[3-8]表示3到8中的一个字符[a-z]表示a到z中的其中一个字符,[b-m]表示b到m中的一个字符[A-Z]表示A到Z中的其中一个字符[b-d3-8]表示b到z或3到8中其中一个字符示例:[a-c][0-9]{3}可以匹配a234,b112,c223等.
5、"^" ---> 即非,用来确定紧靠该符号右边的符号不能出现5.1: [^0-9]表示不可以为0到9和[3-8]3到8中的一个字符5.2: ^A表示不可以为A的字符
6、快捷符号示例:"\\d{6}",匹配6个数字组成的字符。,注意前面要用两个\\表示转义
7、"\"表示转义
如果正则表达式中要使用的字符与通配符冲突,则在前加上"\\"表示不是通配符使用比如"[0-9]{3}\\*{2}[0-9]{2}a*" 中*不是次数,而是字符*。它可以匹配0到9的三个数字开头,后面是两个*,再后是0到9的2个数字最后是0到多个a字符。这个"234**23a"可以匹配上面的正则表达式。
8、"$"表示结束,每个正则表达式后面都可以加上$,实质上加与不加作用相同
9、特殊的匹配[\\u4e00-\\u9fa5]匹配汉字示例:"[\\u4e00-\\u9fa5]{3}", 可以匹配三个汉字组成的字符串
二、匹配次数的通匹符这些符号用来确定紧靠该符号左边的符号出现的次数:
示例1:a*Hello可以匹配以Hello结尾,以0到多个a开头的字符串,如Hello,aHello,aaHello,aaaHello示例2:MyA*Hello可以匹配以My开头,以Hello结尾,中间可以有0到多个A,如MyAAAHello示例3:HelloE+World可以匹配以Hello开头,以World结尾,中间可以有1到多个E,如HelloEEWorld示例4:HelloE?World可以匹配以Hello开头,以World结尾,中间必须有0到1个E示例5:HelloE{3}World可以匹配以Hello开头,以World结尾,中间必须有3个E示例6:HelloE{2,4}World可以匹配以Hello开头,以World结尾,中间必须有2到4个E示例7:Hello[^abc]可以匹配以Hello开头,不能以a或b或c结尾
三、正则表达式的使用
学习目标:
1、判断字符串的正确性2、查找子字符串3、在其它类特别是String中的使用
学习过程:
1、判断字符串的正确性//判断电话号码是否是以136开头的11个数字的电话号码private void m1() {
// 方式一:// boolean b = Pattern.matches("136\\d{8}", "13698987654");// 方式二:Pattern p = Pattern.compile("136\\d{8}");Matcher m = p.matcher("13698987654");boolean b = m.matches();System.out.println(b);//true
}
2、查找子字符串
//查找字符串中是否有算术运算符private void m2() {
Pattern p = Pattern.compile("\\+|\\-|\\*|/|%");Matcher m = p.matcher("23+234-123*234/1000");boolean b = m.find();System.out.println(b);//true
}
//查找字符串中是否有两个数字组成的子字符串private void m3() {
Pattern p = Pattern.compile("\\d{2}");Matcher m = p.matcher("aabbcc23sdf23");System.out.println(m.find());//true
}
3、在其它类特别是String中的使用
//通过运算符把字符串拆开public void m1() {
String s = "23+234-123*234/1000";String[] a = s.split("\\+|\\-|\\*|/");for (String string : a) {
System.out.println(string);
}
}
四、字符串(String)对象的matches函数,可直接使用正则表达式
1、String对象的matches(String regex)方法讲解
boolean matches(String regex):这个方法主要是返回是否匹配指定的字符串,如果匹配则为true,否则为false
实例一:String regex = "Android";String str = "Android";boolean isMatches = str.matches(regex); //true
一、正则表达式的入门:
学习目标:
了解正则表达式
学习过程:
1.概念:“正则表达式”(Regular Expression)就是一个特殊的字符串,用来匹配字符串与查找字符串
2.java基础架包中: java.util.regex 包主要由三个类所组成:Pattern、Matcher 和 PatternSyntaxException。
实例:判断字符串是否以ax开头by结尾,并且中间有仅只有一个字符
public class Test {public boolean m1(String str) {
// 方式一:// Pattern p = Pattern.compile("ax.by");// Matcher m = p.matcher(str);// boolean b = m.matches();
// 方式二boolean b = Pattern.matches("ax.by", str);return b;}public static void main(String[] args) {Test t = new Test();System.out.println(t.m1("axmby"));}}
说明:
提示1:正则表达式还可以在字符串中查找匹配的子字符串; 在其它类中的使用.....。(后面章节会讲到)提示2:- Pattern 对象表示一个已编译的正则表达式。Pattern 类没有提供公共的构造方法。 必须调用公共的静态 compile 方法,它将返回一个 Pattern 对象。- Matcher 是一个靠着输入的字符串来解析这个模式和完成匹配操作的对象。 Matcher 也没有定义公共的构造方法,需要通过调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。- PatternSyntaxException 对象是一个未检查异常,指示了正则表达式中的一个语法错误。
二、正则表达式的组成规范学习目标:
正则表达式通配符
学习过程:
一、匹配字符的通匹符
1、"." ---> 用于匹配一个任意的字符串比如: “t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”
2、"[]" --->为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符:
3、"|"--->如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”, 它的作用与算术表达式中的作用是一样的,表示一个整体。
4、“-”与表示数字或字母的范围,[0-9]表示0到9中的其中一个字符,[3-8]表示3到8中的一个字符[a-z]表示a到z中的其中一个字符,[b-m]表示b到m中的一个字符[A-Z]表示A到Z中的其中一个字符[b-d3-8]表示b到z或3到8中其中一个字符示例:[a-c][0-9]{3}可以匹配a234,b112,c223等.
5、"^" ---> 即非,用来确定紧靠该符号右边的符号不能出现5.1: [^0-9]表示不可以为0到9和[3-8]3到8中的一个字符5.2: ^A表示不可以为A的字符
6、快捷符号示例:"\\d{6}",匹配6个数字组成的字符。,注意前面要用两个\\表示转义
7、"\"表示转义
如果正则表达式中要使用的字符与通配符冲突,则在前加上"\\"表示不是通配符使用比如"[0-9]{3}\\*{2}[0-9]{2}a*" 中*不是次数,而是字符*。它可以匹配0到9的三个数字开头,后面是两个*,再后是0到9的2个数字最后是0到多个a字符。这个"234**23a"可以匹配上面的正则表达式。
8、"$"表示结束,每个正则表达式后面都可以加上$,实质上加与不加作用相同
9、特殊的匹配[\\u4e00-\\u9fa5]匹配汉字示例:"[\\u4e00-\\u9fa5]{3}", 可以匹配三个汉字组成的字符串
二、匹配次数的通匹符这些符号用来确定紧靠该符号左边的符号出现的次数:
示例1:a*Hello可以匹配以Hello结尾,以0到多个a开头的字符串,如Hello,aHello,aaHello,aaaHello示例2:MyA*Hello可以匹配以My开头,以Hello结尾,中间可以有0到多个A,如MyAAAHello示例3:HelloE+World可以匹配以Hello开头,以World结尾,中间可以有1到多个E,如HelloEEWorld示例4:HelloE?World可以匹配以Hello开头,以World结尾,中间必须有0到1个E示例5:HelloE{3}World可以匹配以Hello开头,以World结尾,中间必须有3个E示例6:HelloE{2,4}World可以匹配以Hello开头,以World结尾,中间必须有2到4个E示例7:Hello[^abc]可以匹配以Hello开头,不能以a或b或c结尾
三、正则表达式的使用
学习目标:
1、判断字符串的正确性2、查找子字符串3、在其它类特别是String中的使用
学习过程:
1、判断字符串的正确性//判断电话号码是否是以136开头的11个数字的电话号码private void m1() {
// 方式一:// boolean b = Pattern.matches("136\\d{8}", "13698987654");// 方式二:Pattern p = Pattern.compile("136\\d{8}");Matcher m = p.matcher("13698987654");boolean b = m.matches();System.out.println(b);//true
}
2、查找子字符串
//查找字符串中是否有算术运算符private void m2() {
Pattern p = Pattern.compile("\\+|\\-|\\*|/|%");Matcher m = p.matcher("23+234-123*234/1000");boolean b = m.find();System.out.println(b);//true
}
//查找字符串中是否有两个数字组成的子字符串private void m3() {
Pattern p = Pattern.compile("\\d{2}");Matcher m = p.matcher("aabbcc23sdf23");System.out.println(m.find());//true
}
3、在其它类特别是String中的使用
//通过运算符把字符串拆开public void m1() {
String s = "23+234-123*234/1000";String[] a = s.split("\\+|\\-|\\*|/");for (String string : a) {
System.out.println(string);
}
}
四、字符串(String)对象的matches函数,可直接使用正则表达式
1、String对象的matches(String regex)方法讲解
boolean matches(String regex):这个方法主要是返回是否匹配指定的字符串,如果匹配则为true,否则为false
实例一:String regex = "Android";String str = "Android";boolean isMatches = str.matches(regex); //true
package com.chance.coding; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ZhengZeBiaoDa { public static void main(String[] args) { ZhengZeBiaoDa zzbd = new ZhengZeBiaoDa(); zzbd.m1(); zzbd.m2(); zzbd.m3(); zzbd.m4(); } //判断电话号码是否已136开头的11个数字的电话号码 private void m1(){ //方式一 // boolean b = Pattern.matches("136\\d{8}", "13698987654"); //方式二 Pattern p = Pattern.compile("136\\d{8}"); Matcher m = p.matcher("13698987654"); boolean b = m.matches(); System.out.println(b); } //查找字符串是否有算术运算符 private void m2(){ Pattern p = Pattern.compile("\\+|\\-|\\*|/|%"); Matcher m = p.matcher("23+234-123*234/1000"); boolean b = m.find(); System.out.println(b); } //查找字符串中中是否有两个数字组成的子字符串 private void m3(){ Pattern p = Pattern.compile("\\d{2}"); Matcher m = p.matcher("aabbcx23sdf23"); System.out.println(m.find()); } //通过运算符把字符串拆开 public void m4(){ String s = "23+234_123*234/1000"; String[] a = s.split("\\+|\\-|\\*|/"); for (String string : a) { System.out.println(string); } } }