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

 

posted @ 2017-08-14 08:41  K_artorias  阅读(354)  评论(0编辑  收藏  举报