正则表达式/正规表达式/常规表达式.
通俗地说,就是用一个模式字符串来判断给定的原始字符串是否符合某种规范–匹配(例如:是不是email地址,是不是11位的电话号码,
是不是网址….)
还有,可以从一大段文本中查找符合指定模式的字符串(例如,从网页文件中查找所有的email地址).
相关方法说明:
public boolean matches(String regex) 此字符串是否匹配给定的正则表达式
public String[ ] split(String regex) 根据给定正则表达式的匹配拆分此字符串
public String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
regex是正则表达式,前面的是返回值类型.全部都用字符串加点调用.replace是替换后的字符串.
* [abcde] 可以匹配a 或者 b 或者c
* [^abce] 不能是 或者 b 或者 c
* [a-zA-z] 可以是 a-z或者是A-Z
* [a-zA-Z_0-9]
* \d 数字0-9
* \D 非数字
* \w a-zA-Z_0-9
* \W 不允许 出现 a-zA-Z_0-9
*
* 数量词
* ? 一次或者一次也没有
* * 零次或多次
* + 一次或者多次
* {n} 恰好n次
* {n,} 至少n次
* {n,m} 至少n次 不超过m次
String str =”92374923874”;
//qq号以1-9开头,后面有4-14位数字
String regex =”[1-9]\d{4,14}”; //\d 数字:[0-9]
boolean boo = str.matches(regex);//验证qq号是否和正则表达式匹配
System.out.println(str+”:”+boo);
String ss = “door”;
String regex2 =”do?r”;//?前面的字符出现0-1次
boolean bo = ss.matches(regex2);
System.out.println(ss+”:”+bo);//false
String regex3 = “do.r”;// .表示一个任意字符
boolean bo3 = ss.matches(regex3);
System.out.println(ss+”:”+bo3);//true
//{4,14}是量词,表示前面的元素出现4(包含)到14(包含)次
//{n}前面的元素能且只能出现n次
//{n,}……..>=n次
//{,n}……..<=n次
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches(); //判断是否完整匹配
在仅使用一次正则表达式时,可以方便地通过Pattern类的 compile方法来编译表达式并在单个调用中将输入序列与其匹配。如果完全匹配,则返回true:
boolean b = Pattern.matches(“a*b”, “aaaab”);
等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
Pattern p = Pattern.compile(“W(o.)(ld!)”); //第0组是整个模式串,第1组是第一个()中的内容,第2组是第二个()中的内容
Matcher m = p.matcher(“Hello,Wo6ld! Wo8ld! in Java.”);
Pattern p = Pattern.compile("W(o.)(ld!)"); //第0组是整个模式串,第1组是第一个()中的内容,第2组是第二个()中的内容
Matcher m = p.matcher("Hello,Wo6ld!4s56d4f65Wo8ld!156465 in Java.");
while(m.find()){//判断能不能找到下一个匹配
String s = m.group();//等价于m.group(0)
System.out.println(s);
int startIndex = m.start(0);//当前匹配串的第0组的起始下标
int endIndex = m.end(0);//当前匹配串的第0组的起始下标(不含)
System.out.println("group(0)的起始下标"+startIndex);
System.out.println("group(0)的结束下标"+endIndex);
}
Matcher类的方法:
public boolean find()查找下一个匹配
public String group()//等效于group(0) 整组匹配
public int start(int)当前匹配的中的某组的起始下标
public int end(int)当前匹配的中的某组的结束下标(不含)String
查找e-mail
String content = "a;jfd;salkjfd===zhangsan@vip.sina.com.cn------lisi@sohu.com[][][sfsad";
Pattern p = Pattern.compile("\\w+@\\w+(\\.\\w+)+");
Matcher matcher2 = p.matcher(content);//声明的形参类型是CharSequence接口类型,实际传入的是String实现类对象
while(matcher2.find()){
System.out.println(matcher2.group());
}