正则表达式常用语法:
a* 可以有0或N个a
a+ 至少有1个a
a? 可以有0或1个a
^a 以a开头
a$ 以a结尾
a. a后面有任意1个字符
() 表示里面是一个整体
a{m} 必须有m个a
a{m,} 至少有m个a
a{m,n} 有m到n个a
a|b a或b
[ab] a和b取其中一个
[0-9] 0到9取其中一个
\w 用于匹配字母,数字或下划线字符
\d 用于匹配从0到9的数字
手机号码正则表达式: ^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|70)\\d{8}$ 随着运营商的规则变化,该表达式也需修改
【java中使用正则表达式】
package com.aa.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest {
public static void main(String[] args) {
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher("00aa11bb22cc33");
System.out.println(m.matches()); //整个串匹配则返回true
System.out.println(m.lookingAt()); //最前面匹配则返回true
System.out.println(m.find()); //从上一个匹配的子串后面开始,任意有匹配则返回true
System.out.println(m.group()); //上面find匹配的子串
m.reset(); //重置
System.out.println(m.find()); //从上一个匹配的子串后面开始,任意有匹配则返回true
System.out.println(m.start()); //上面find匹配的子串的开始索引位置
System.out.println(m.end()); //上面find匹配的子串的最后索引位置+1
System.out.println(m.group()); //上面find匹配的子串
System.out.println(m.replaceAll("*")); //所有匹配的串替换为*
System.out.println(m.replaceFirst("*")); //第一个匹配的串替换为*
/*注意:matches、lookingAt、find必须为true时,后面才可以使用start,end,group,否则抛java.lang.IllegalStateException*/
}
}