java正则表达式 3 -- 查找
用正则表达式执行查找命令,则需要用正则对象,其规则和执行顺序如下:
指定为字符串的正则表达式必须首先被便以为此类的实例。然后,可将得到的正则对象匹配任意的字符串用于创建Mather对象,执行匹配所涉及的所有状态都驻留在匹配其中,所以多个匹配器可以共享同一个模式。
查找需要使用的对象:
Pattern 正则对象
Matcher 匹配器对象
因此,典型的调用顺序为:
Pattern p = Pattern.compile("正则");
Matcher m = p.matcher("aaaaaab");
boolean b = m.matchers();
匹配器要使用到的方法:
find() 通知匹配器去匹配字符串,查找符合规则的字符串。如果能查找到符合规则的字符串,返回true
group() 获取符合规则的子串
下面用代码实现对一段字符串中邮箱的查找,假设邮箱规则:@前:位数为3-18位,首位是不能为0或者下划线的字符,其他位任意字符 @后:2位以上的非下划线字符+(.com .cn .net .com.cn)
1 public class Demo2 { 2 public static void main(String[] args) { 3 //找出邮箱 4 String str = "联系邮箱:老王-1543644@qq.com;老赵-zhao@sina.com;" 5 + "Tim-timEmail@gg.net;大明-ming@safe.com.cn;盖茨-gaici@ma.cn"; 6 7 String reg = "[a-zA-Z1-9]\\w{2,17}@[a-zA-Z0-9]{2,}(\\.(com|cn|net)){1,2}"; 8 //指定为字符串的正则表达式必须首先被便以为此类的实例 9 Pattern p = Pattern.compile(reg); 10 //使用正则对象匹配字符串用于产生一个mather对象 11 Matcher m = p.matcher(str); 12 13 while (m.find()) { 14 System.out.println(m.group()); 15 } 16 } 17 }
补充:
加入对字符串“ri zhao xiang lu sheng zi yan”查找,查找其中的两个字母组成的子串
如果直接把正则写成reg="[a-zA-Z]{2}",那么查询结果就会如下:
ri
zh
xi
lu
sh
zi
ya
可以看到,不仅查到了组成字符个数为两个的单词,还查到了多个的并且剪切到了前两位。此时就要加入边界匹配器:
那么我们新的正则就应该是reg="\\b[a-zA-Z]{2}\\b" ,执行结果为:
ri
lu
zi