目录
正则表达式
一,什么是正则表达式?
什么是正则表达式?
正则表达式的用途:
重要声明
怎么认识正则表达式
Java对正则表达式的支持
Pattern类使用示例
1.共享模式
2.独立模式
String类的方法使用示例
正则规则
1.字符类
2.预定义字符类
3.边界匹配器
4.Greedy 数量词
5.Logical运算符
6.反斜线、转义和引用
一,什么是正则表达式?
什么是正则表达式?
正则表达式(Regular expression)就是一个字符构成的
串,它定义了一个用来搜索匹配字符串的模式。
正则表达式的用途:
验证字符串是否合法 查找指定格式的字符串 替换指定格式的字符串 提取符合指定格式的字符串
重要声明
正则表达式是一个独立的模式匹配规则,有自己的格式与语义规定。现今很多语言都支持正则表达式处理文本,如Java, C#, Javascript, PHP, Perl, Python等。 不同的语言对正则表达式的支持方式可能不同,所支持语法细节规则也可能不同,在使用时请根据特定的语言去使用正则表达式。
怎么认识正则表达式
使用Java正则表达式编程与传统编程相比: 优点: 简化代码编写,提高处理效率 在判断Email,IP等格式时,使用传统的对字符串比较的方式,可能需要几十行代码,而使用正则表达式,则只需要几行就能解决问题。 缺点: 需要单独学习Java正则表达式 写出来的程序不易理解,可读性不好
Java对正则表达式的支持
Java中对正则表达式的使用: 独立使用:Java在提供了java.util.regex.Pattern类和java.util.regex.Matcher类支持正则表达式的使用 结合String类使用,涉及的方法有: matches replaceAll split
Pattern类使用示例
1.共享模式
//将给定的正则表达式编译为模式。
Pattern p = Pattern.compile("[a-z]{6,8}");
//创建一个匹配器,匹配给定的输入
Matcher m = p.matcher("asdasd");//6~8个字母组成
//尝试将整个区域与模式进行匹配。
boolean b = m.matches();
System.out.println(b);
//将给定的正则表达式编译为模式。
Pattern p = Pattern.compile("[a-z]{6,8}");
//创建一个匹配器,匹配给定的输入
Matcher m = p.matcher("asdasd");//6~8个字母组成
//尝试将整个区域与模式进行匹配。
boolean b = m.matches();
System.out.println(b);
2.独立模式
boolean flag=Pattern.matches("[a-z]{6,8}","asdasd");
System.out.println(flag);
String类的方法使用示例
String类的几个方法(matches, replaceAll, split)可以直接传入正则表达式,如下
public boolean matches(String regex)告诉这个字符串是否匹配给定的regular expression 。 这种形式为str .matches( regex )方法的)产生与表达式完全相同的结果 Pattern. matches(regex, str) 参数 regex - 要匹配此字符串的正则表达式 结果 true如果,并且只有这个字符串与给定的正则表达式匹配 异常 PatternSyntaxException - 如果正则表达式的语法无效
String pwd="asdfgh";
boolean flags=pwd.matches("[a-z]{6,8}");
System.out.println(flags);
正则规则
1.字符类
一个[]只能代表一个字符
package com.sk.test;
public class Dome01 {
public static void main(String[] args) {
//[abc] a、b 或 c(简单类)
System.out.println("c".matches("[abc]"));
System.out.println("55".matches("[235]"));
System.out.println("55".matches("[1234566789][0123456789]"));
//[^abc] 任何字符,除了 a、b 或 c(否定)
System.out.println("a".matches("[^abc]"));
//[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
System.out.println("".matches("[a-z]"));//小写字母
System.out.println("".matches("[A-Z]"));//大写字母
System.out.println("".matches("[0-9]"));//数字
System.out.println("".matches("[a-zA-Z]"));//小写字母或大写字母
System.out.println("".matches("[0-15-82]"));//0-1 5-8 2
System.out.println("".matches("[3-5][0-9]"));//30-59
//[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
System.out.println("".matches("[0-9[a-z]]"));
System.out.println("".matches("[0-9a-z]"));
//[a-z&&[def]] d、e 或 f(交集)
System.out.println("".matches("[a-j&&[c-z]]"));
//[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
System.out.println("".matches("[a-j&&[^c-z]]"));
//[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
System.out.println("".matches("[a-j&&[^c-z]]"));
}
}
2.预定义字符类
package com.sk.test;
public class Dome02 {
public static void main(String[] args) {
// 预定义字符类
// . 任何字符(与行结束符可能匹配也可能不匹配)
System.out.println("".matches("."));
//d 数字:[0-9]
System.out.println("0".matches("\d"));
//D 非数字: [^0-9]
System.out.println("0".matches("\D"));
//s 空白字符:[ tnx0Bfr]
System.out.println("".matches("\s"));
//S 非空白字符:[^s]
System.out.println("".matches("\S"));
//w 单词字符:[a-zA-Z_0-9] 数字字母下划线
System.out.println("".matches("\w"));
//W 非单词字符:[^w]
System.out.println("".matches("\W"));
}
}
3.边界匹配器
package com.sk.test;
public class Dome03 {
public static void main(String[] args) {
// 边界匹配器
// ^ 行的开头
System.out.println("".matches("^1\d"));
System.out.println("张三ll".matches("^张.."));
// $ 行的结尾
System.out.println("".matches("\w\w$"));
System.out.println("".matches("..丰$"));
//张X丰
//b 单词边界
//B 非单词边界
//A 输入的开头
//G 上一个匹配的结尾
//Z 输入的结尾,仅用于最后的结束符(如果有的话)
//z 输入的结尾
}
}
4.Greedy 数量词
5.Logical运算符
6.反斜线、转义和引用
反斜线、转义和引用 反斜线字符 ('') 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符。因此,表达式 \ 与单个反斜线匹配,而 { 与左括号匹配。 在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。可以在非字母字符前使用反斜线,不管该字符是否非转义构造的一部分。
package com.sk.test;
public class Dome05 {
public static void main(String[] args) {
// Logical 运算符
// XY X 后跟 Y
System.out.println("ab".matches("ab"));
// X|Y X 或 Y
System.out.println("男".matches("男|女"));
// (X) X,作为捕获组 ()中的内容会被当做一个整体
//1-999
System.out.println("(\d)|([1-9]\d)|([1-9]\d{2})");
//
System.out.println("a:\".matches("a:\\"));
//验证.com的后缀
System.out.println("a.com".matches(".*\.com"));
//验证 (
System.out.println("(".matches("\("));
}
}
反斜线、转义和引用 反斜线字符 ('') 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符。因此,表达式 \ 与单个反斜线匹配,而 { 与左括号匹配。 在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。可以在非字母字符前使用反斜线,不管该字符是否非转义构造的一部分。



