1.基本正则标记
package com.wjx.sayHello;
public class RegexTestDemo {
public static void main(String[] args) {
/* 1.描述单个字符
* x:表示单个字符x
* \\:匹配“\”
* \t :描述制表符
* \n:表示换行
* */
System.out.println("a".matches("a"));
System.out.println("\\".matches("\\\\"));
/* 2.描述一个范围 */
// [abc] : 表示字母abc中的任意一个
// [^abc] : 表示字母abc中的任意一个
// [0-9] : 表示'0'~'9'由数字组成,即字符是0~9的数字组成的
// [a-zA-Z] : 表示不区分大小写a~z
System.out.println("a".matches("[abc]"));
System.out.println("x".matches("[^abc]"));
System.out.println("1".matches("[0-9]"));
System.out.println("V".matches("[a-zA-Z]"));
/* 3.单个简化表达式
* "." 表示任意一个字符
* \d 等价与[0-9]
* \D 等价与[a-zA-Z]
* \s 表示一位空格,可能是空格、\t,\n
* \S 表示不是一位空格
* \w 等价于字符数字下划线 [a-zA-Z0-9_]
* \W 等价于不是字符数字下划线 [^a-zA-Z0-9_]
*
*/
System.out.println("a".matches("."));
System.out.println("1".matches("\\d"));
System.out.println("D".matches("\\D"));
System.out.println("\t".matches("\\s"));
System.out.println("_".matches("[a-zA-Z0-9_]"));
/* 4.边界匹配(Java 用不到,在js使用) */
// ^ :表示正则的开始
// $ :表示正则的结束
/* 5.数量表达式,需要重复出现N次
* ? :出现0次或者一次
* + :出现一次或者多次
* * :出现0次,1次或者多次
* {n}:出现n次
* {n,}:出现大于等于n次
* {n,m}:出现大于等于n,小于等于 m次
* */
System.out.println("".matches("[a-z]?"));
System.out.println("asa".matches("[a-z]+"));
System.out.println("".matches("[a-z]*"));
System.out.println("12312".matches("[0-9]{5}"));
System.out.println("1231223".matches("[0-9]{5,}"));
System.out.println("1231223".matches("[0-9]{5,10}"));
/* 5.数量表达式,需要重复出现N次
* 正则A正则B:表示与的关系,第一个匹配之后立即匹配第二个
* 正则A|正则B:表示正则A或者正则B出现一次
* (正则):按照一组正则进行处理
* */
}
}
2.String对正则的支持
package com.wjx.sayHello;
import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringRegexTestDemo {
public static void main(String[] args) throws Exception {
//提取字符串中所有字母(将字符串所有非字母用空代替)
String str="DSNI212312ss312feq23";
String regex="[^a-zA-Z]";
System.out.println(str.replaceAll(regex, ""));
// 字符串拆分
String regex1="\\d+";//[0-9]
String str1="a1b22c333d4444e555555fqweqw312dse12e";
String result[]=str1.split(regex1);
for(int x=0;x<result.length;x++){
System.out.print(result[x]+"、");
}
System.out.println();
//字符验证
//1.验证一个字符串是否为数字,如果是数字,全部double输出
String str2="12311.1213";
String regex2="\\d+(\\.\\d+)?";//验证是否为数字,可以为小数可以不为小数
if(str2.matches(regex2)){
double data=Double.parseDouble(str2);
System.out.println(data);
}else
System.out.println("输入数字中包含非数字字符");
//2.要求验证一个字符串是否为日期或者日期时间,如果是则将其变为Date类型
String str3 = "2016-01-03 02:03:11";
String regex3="\\d{4}-\\d{2}-\\d{2}";
if(str3.matches(regex3)){
System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str3));
}else if(str3.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")){
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(str3));
}
//3.现在要求判断给定的电话号码是否正确(用一个正则表示)
//电话格式一:51283382
//电话格式二:01051283382
//电话格式一: (010)-51283382
String str4="(0513)-51235567";
String regex4="((\\(\\d{3,4}\\)-)|(\\d{3,4}))?\\d{7,8}";// 自己组合吧
if(str4.matches(regex4)){
System.out.println("号码正确");
}else
System.out.println("号码不符合");
//4.验证emali地址
String str5="Lw88java.v_-ww@njmind-java.com";
String regex5="[a-zA-Z][a-zA-Z_\\-\\.0-9]{4,14}@[a-zA-Z_\\-\\.0-9]+\\.(cn|com|net)";
if(str5.matches(regex5)){
System.out.println("邮箱正确");
}else
System.out.println("邮箱不正确");
// java.util.regex.Pattern包
String str6="a|B|c";
String regex6="\\|";
Pattern pat=Pattern.compile(regex6);
String result6[]=pat.split(str6);
for(int i=0;i<result6.length;i++){
System.out.println(result[i]);
}
//java.util.regex.Matcher 负责分组的时候需要使用
String str7="INSERT INTO member(name,age,sex) values(#{member.name},#{member.age},#{meeber.sex})";
String regex7="#\\{[a-zA-Z_0-9\\.]+\\}";
Pattern pat7=Pattern.compile(regex7);
Matcher mat=pat7.matcher(str7);
while(mat.find()){
System.out.println(mat.group(0));
}
}
}