由于为了看到效果,这里使用一个公共的输出类只控制输出:
package test;
public class Print{
public static void println(Object o){
System.out.println(o);
}
public static void print(Object o){
System.out.print(o);
}
}
package test;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import static test.Print.*;
/*
*认识正则表达式的概念
*用途:
*1、字符串匹配;
*2、字符串查找;
*3、字符串替换。
*/
public class Test{
public static void main(String[] args){
println("abc".matches("..."));
println("abc9796fa56j".replaceAll("\\d","_")); //把所有数字替换成下划线
Pattern ptn = Pattern.compile("[a-z]{3}"); //匹配任意三个连续的英文字符
Matcher mt = ptn.matcher("bey");
println(mt.matches());
//上面的三句话可以用一句来表达
println("bey".matches("[a-z]{3}"));
}
}
package test;
import java.util.regex.*;
import static test.Print.*;
/*
* 预定义字符类
* \\\\表示\斜杠
* . 任何字符(与行结束符可能匹配也可能不匹配)
* \d 数字:[0-9]
* \D 非数字: [^0-9]
* \s 空白字符:[\t\n\x0B\f\r]
* \S 非空白字符:[^\s]
* \w 单词字符:[a-zA-Z_0-9]
* \W 非单词字符:[^\w]
* 注意:\s匹配\r,\n,\r,\f和空格
*/
public class Demo1{
public static void main(String[] args){
//判断斜杠
println("0:" + "\\".matches("\\\\"));
//判断任意字符
println("1:" + "a".matches(".")); //返回true
//判断数字字符
println("2:" + "8".matches("\\d")); //判断是否是数字,返回true
println("3:" + "89".matches("\\d")); //只能用于判断一个数字,返回false
println("4:" + "7".matches("\\D")); //由于7是数字字符,所以返回false
println("5:" + "&".matches("\\D")); //返回true
//空白字符
println("6:" + " ".matches("\\s")); //返回true
println("7:" + "7".matches("\\s")); //返回false
println("8:" + " ".matches("\\S")); //返回false
//单词字符
println("9:" + "+".matches("\\w")); //返回false
println("10:" + "7".matches("\\w")); //返回true
println("11:" + "_".matches("\\W")); //返回false
println("12:" + "b".matches("\\w")); //返回true
//特殊字符
println("13:" + "\n".matches("\\s")); //返回true
}
}
package test;
import java.util.regex.*;
import static test.Print.*;
/*
* Greedy 数量词
* X? X,一次或一次也没有
* X* X,零次或多次
* X+ X,一次或多次
* X{n} X,恰好 n 次
* X{n,} X,至少 n 次
* X{n,m} X,至少 n 次,但是不超过 m 次
*
*/
public class Demo2{
public static void main(String[] args){
println("1: " + "ab".matches("ab")); //精确匹配
println("2: " + "a".matches("a?")); //a可以出现一次,也可以没有
println("3: " + "b".matches("a?"));
println("4: " + "".matches("a*")); //a可以出现零次或多次
println("5: " + "aa".matches("a*"));
println("6: " + "".matches("a+")); //a必须出现一次或多次
println("7: " + "aaa".matches("a+"));
println("8: " + "a".matches("a{3}")); //a必须出现恰好n次
println("9: " + "aaa".matches("a{3}"));
println("10: " + "a".matches("a{3,7}")); //a必须出现最少n次,最多m次
println("11: " + "aaaa".matches("a{3,7}"));
//下面是自我提高练习
println("基本判断一个ip:");
print("判断192.168.10.8是不是ip地址:");
println("192.168.10.8".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
print("判断192.168.baby.8是不是ip地址:");
println("192.168.baby.8".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
//上面的也可以使用Pattern来判断
println("使用Pattern来实现");
Pattern pt = Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
print("判断192.168.10.8是不是ip地址:");
println(pt.matcher("192.168.10.8").matches());
//判断EMAIL地址
println("EMAIL判断");
pt = Pattern.compile("[a-zA-Z0-9|_|-]{3,}@[a-zA-Z0-9]{3,}\\.[a-zA-Z0-9]{2,}");
print("判断[email protected]是否是Eamil地址:");
println(pt.matcher("[email protected]").matches());
print("判断[email protected]是否是Eamil地址:");
println(pt.matcher("[email protected]").matches());
print("判断[email protected]是否是Eamil地址:");
println(pt.matcher("[email protected]").matches());
print("判断116203610*[email protected]是否是Eamil地址:");
println(pt.matcher("116203610*[email protected]").matches());
}
}