Java编程模版一之正则表达式

197 阅读2分钟

本系列文章,记录自己平时的一些代码,目的是为了做到不重复造轮子

package com.study.demo.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
正则表达式匹配邮箱规则
*/
public class PatternUtil {

    private static final String email_pattern = "^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9\u4e00-\u9fa5]+(\.[a-zA-Z0-9\u4e00-\u9fa5]+)+$";
    private static final Pattern EMAIL_PATTERN = Pattern.compile(email_pattern);

    public static void main(String[] args) {
        String test1 = "xxxxxxx@163.com";
        System.out.println(isValidatedEmail(test1));
        System.out.println(test1.matches(email_pattern));

    }

    public static boolean isValidatedEmail(String email) {
        Matcher matcher = EMAIL_PATTERN.matcher(email);
        return matcher.matches();
    }

}

正则表达式matcher.group()用法

本帖转自www.cnblogs.com/jsStudyjj/p…

group是针对()来说的,group(0)就是指的整个串,group(1) 指的是第一个括号里的东西,group(2)指的第二个括号里的东西。

package cn.mingyuan.regexp.singlecharacter;  
      
    import java.util.regex.Matcher;  
    import java.util.regex.Pattern;  
      
    public class GroupIndexAndStartEndIndexTest {  
      
    /** 
    * @param args 
    */  
    public static void main(String[] args) {  
       // TODO Auto-generated method stub  
       String str = "Hello,World! in Java.";  
       Pattern pattern = Pattern.compile("W(or)(ld!)");  
       Matcher matcher = pattern.matcher(str);  
       while(matcher.find()){  
        System.out.println("Group 0:"+matcher.group(0));//得到第0组——整个匹配  
        System.out.println("Group 1:"+matcher.group(1));//得到第一组匹配——与(or)匹配的  
        System.out.println("Group 2:"+matcher.group(2));//得到第二组匹配——与(ld!)匹配的,组也就是子表达式  
        System.out.println("Start 0:"+matcher.start(0)+" End 0:"+matcher.end(0));//总匹配的索引  
        System.out.println("Start 1:"+matcher.start(1)+" End 1:"+matcher.end(1));//第一组匹配的索引  
        System.out.println("Start 2:"+matcher.start(2)+" End 2:"+matcher.end(2));//第二组匹配的索引  
        System.out.println(str.substring(matcher.start(0),matcher.end(1)));//从总匹配开始索引到第1组匹配的结束索引之间子串——Wor  
       }  
    }  
      
    }

运行结果:

Group 0:World!  
    Group 1:or  
    Group 2:ld!  
    Start 0:6 End 0:12  
    Start 1:7 End 1:9  
    Start 2:9 End 2:12  
    Wor

JAVA正则表达式,matcher.find()和 matcher.matches()的区别

find()方法是部分匹配,是查找输入串中与模式匹配的子串,如果该匹配的串有组还可以使用group()函数。

matches()是全部匹配,是将整个输入串与模式匹配,如果要验证一个输入的数据是否为数字类型或其他类型,一般要用matches()。

关于正则表达式中的.,.?,.+?的理解

参考文章: blog.csdn.net/sinat_32336…

.+ 与 .* .+代表最少一个字符 .* 代表任意数量的字符

@Test
public void test1() {
    String str = "ababccaab";
    Pattern pattern = Pattern.compile("a.*?b");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println(matcher.group(0));
    }
}

res

ab
ab
aab

@Test
public void test1() {
    String str = "ababccaab";
    Pattern pattern = Pattern.compile("a.+?b");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println(matcher.group(0));
    }
}

res

abab
aab