正则表达式

来源:互联网 发布:mac度数符号怎么打 编辑:程序博客网 时间:2024/05/29 18:02

预定义字符类

. 任意字符    \d 数字:[0-9]    \D 非数字:[^0-9]    \s 空白字符:[\t\n\x08\f\t]    \S 非空白字符:[^\s]    \w 单词字符:[a-z,A-Z_0-9]    \W 非单词字符:[^\w]     注意:没有加上数量词之前都只能匹配一个字符

数量词

    ? 一次或一次也没有    * 零次或多次    + 一次或多次    {n} 恰好n次    {n,} 至少n次   (n,m) 至少n次,至多不超过m次

范围词

        [abc] a,b或c(简单类)        [^abc] 任何字符,除了abc        [a-zA-Z] a到z或A到Z        [a-d[m-p]] a到d或m到p(并集)        [a-z&&[def]] a到z与d,e,f的交集->d,e,f       注意:没有数量词就只能匹配一个

分组

目的:让正则的内容被复用,组号从1开始((A)(B(C)))组号1:((A)(B(C)))组号2:(A)组号3:(B(C))组号4:(C)\1:引用第一组所匹配的内容

作用

1.匹配
匹配手机号等等matchesphone()
matchesTellphone


public static void matchesPhone(String phone)
{
//第一位必须为1,第二位34578,一共11位,全是数字
String s=”1[34578]\d{9}”;
System.out.println(phone.matches(s)?”合法手机号”:”非法手机号”);
}
public static void matchesTellphone(String tellphone)
{
//匹配成都区号028,字符 - ,号码8位,8开头,2是第二个,后面还有6位
String s=”0\d{2,3}-[1-9]\d{6,7}”;
System.out.println(tellphone.matches(s)?”合法固定电话”:”非法固定电话”);
}


2.切割
split();
” +”:空格切割
“(.)//1+”:重复字符切割,任意内容重复1次或一次以上,就切割


public static void testsplit1(String s)
{
//空格切割
String[] data=s.split(” +”);
System.out.println(Arrays.toString(data));
}
public static void testsplit2(String s)
{
String[] data=s.split(“(.)\1+”);
System.out.println(Arrays.toString(data));
}


3.替换
replaceAll(String regex(正则表达式),String replacement(代替内容))


public static void replacephone(String s)
{
String re=”1[34578]\d{9}”;
s=s.replaceAll(re,”**“);
System.out.println(s);
}


            如果需要再replace方法正则外部引用组的内容,那么使用"$组号",如$1

public static void wordreplace(String reword)
{
String s=”(.)\1+”;
reword= reword.replaceAll(s,”1");//replace使"组号”
System.out.println(reword);
}
}


4.查找
查找需要使用对象:
一.pattern(正则对象)
指定为字符串的正则表达式必须先编译为此类的实例,然后,可将得到的正则对象匹配任意的字符串用于
创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配,执行破匹配所涉及的所有状态都
驻留在匹配器中,所以多个匹配器可以共享同一模式
因此,典型的调用顺序是:
Pattern p=Pattren.compile(“正则表达式”);//正则表达式编译为正则对象p
Matcher m=p.matcher(“aaaaab”);//正则对象匹配字符串产生一个匹配器,所有信息留在匹配器里
boolean b=m.matches();
匹配器会用到的方法
1.find() 通过匹配去匹配字符串,查找符合规则的字符串
2.group() 获取符合规则的子串,(使用group()方法必须先调用find()去查找是否有符合规则的字符串,不然会报错)


String content=”来啊:1209024357@qq.com,来啊:1209fdwsg@qq.com,来啊:15678532@qq.com.cn,来啊:fenfne@136.com” +
“,来啊:126546557@qq.com,来啊:afhjfs@163.com,来啊:54564546@qq.net,来啊:hkhhjfs@163.com.cn” +
“,来啊:984785547@qq.cn.com,来啊:12234157@qq.com”;

Pattern p=Pattern.compile(“\b[a-zA-Z1-9]\w{5,17}@[a-zA-Z0-9]{2,}(\.(com|cn|net)){1,2}\b”);
Matcher m=p.matcher(content);
while(m.find())
System.out.println(m.group());