一、简介
正则表达式(Regular Expression,简称regex或RE),是一种用于匹配字符串的强大工具,它可以用来检查一个字符串是否符合某种模式,或者从某个字符串中提取符合特定模式的子串,在Java中,正则表达式主要通过java.util.regex包中的Pattern和Matcher类来实现。
二、基本语法
1、字符集
字符集是用来描述正则表达式中可能出现的字符的元字符,常见的字符集有:
- .:表示任意字符(除了换行符)
- \w:表示字母、数字或下划线
- \W:表示非字母、非数字和非下划线的字符
- \d:表示数字
- \D:表示非数字
- s:表示空白字符(空格、制表符、换行符等)
- \S:表示非空白字符
- [abc]:表示字符a、b或c
- [^abc]:表示非字符a、b或c
- [a-z]:表示小写字母a到z
- [A-Z]:表示大写字母A到Z
- [0-9]:表示数字0到9
- [^0-9]:表示非数字0到9
2、量词
量词用来描述字符出现的次数,常见的量词有:
- </code>:表示前面的字符可以出现0次或多次
- +:表示前面的字符可以出现1次或多次
- ?:表示前面的字符可以出现0次或1次
- {n}:表示前面的字符必须出现n次
- {n,}:表示前面的字符至少出现n次
- {n,m}:表示前面的字符至少出现n次,最多出现m次
3、边界
边界用来描述字符的位置关系,常见的边界有:
- ^:表示字符串的开头
- $:表示字符串的结尾
- \b:表示单词的边界(即字母、数字或下划线与非字母、非数字和非下划线之间的边界)
- :表示单词内部(即字母、数字或下划线之间的边界)
4、分组与捕获
分组是将多个字符组合成一个整体,以便对它们进行操作,捕获是从匹配的字符串中提取子串,常见的分组与捕获符号有:
- ():表示分组,括号内的内容会被作为一个整体进行处理
- (?:):表示非捕获分组,括号内的内容不会被捕获,但会保留匹配结果,以便后续使用
- (?<name>):表示命名捕获,为捕获的内容指定一个名称,以便后续使用
- (?P<name>):与命名捕获相同,但使用的是Perl风格的命名方式
- (?=):表示正向前瞻,用于匹配后面跟着某个模式的位置,但不捕获匹配的内容
- (?!):表示负向前瞻,用于匹配后面不跟着某个模式的位置,但不捕获匹配的内容
三、实战应用
1、验证邮箱地址格式
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidator {
    public static void main(String[] args) {
        String email = "example@example.com";
        String regex = "^[\\w\\._%+-]+@[\w\\.-]+\\.[\\w\\.]{2,}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(email);
        if (matcher.matches()) {
            System.out.println("邮箱地址格式正确");
        } else {
            System.out.println("邮箱地址格式错误");
        }
    }
}
2、提取URL中的域名和路径
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Group;
public class URLParser {
    public static void main(String[] args) {
        String url = "https://www.example.com/path/to/page?query=param";
        String regex = "^(https?://)?([\w\\.-]+)(/[\\w\\.-]+)*(\\??[\\w=&]+(&[\\w=&]+)*)?$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(url);
        if (matcher.matches()) {
            Group domainGroup = matcher.group(2); // 域名部分,如www.example.com
            Group pathGroup = matcher.group(3); // 路径部分,如/path/to/page?query=param,如果没有路径则为null或空字符串
            System.out.println("域名:" + domainGroup);
            System.out.println("路径:" + pathGroup);
        } else {
            System.out.println("URL格式错误");
        }
    }
}
3、验证手机号码格式(中国大陆)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Group;
import java.util.Locale;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Currency;
import java.util.CurrencyUnit;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.format.DateTimeFormatter;
import java.time.*;
import java.time.*; // for date and time classes, e.g LocalDate, LocalTime, etc... 
// import other necessary libraries here...
// ...
public class Main {
public static void main(String[] args) {
	// your code here...
	System.out



 
		 
		 
		 
		
还没有评论,来说两句吧...