正则表达式(Regex)
正则表达式是一种最早起源于Perl语言的特殊字符串技术,可以通过一些固定的模式编写一些特殊的字符串,通过对这些特殊字符串使用,可以有效的进行表单验证(手机,邮箱,网址等输入格式的检查),以及一些数据的爬取,包括字符替换等功能;因此,正则表达式是一项非常强大的表达式语言。
Java中对正则表达式的支持主要通过以下几个类:
-
java.lang.String 字符串类
-
java.util.regex.Pattern 正则表达式的编译器类
-
java.util.regex.Matcher 正则表达式的匹配器
一个字符的匹配:
.:表示中间任意字符
[abc]:范围匹配,匹配a或b或c
[0-9]:0到9之间的所有字母
[a-z]:表示a到z之间的所有字母
[b-[^abc]]除了abc都是true
多个字符的匹配:
(a|aa|aaa|b):匹配a或者aa或者aaa或者b
*:任意次数(紧挨着左边的那个字符,出现的次数)
+:一次或者多次(至少一次)
{n,m}:n到m次
{n}:必须出现n次
{3,}至少3次
?:一次或者0次
简单的正则表达式例子:
手机号: ^1[3456789]\\d{9}$
解析:
观察以上表达式,被匹配的字符串,必须以数字1开后,后面第二数只能为3,4,5,6,7,8,9中的其中一个,从第三位开始后面一共包含9位数字,并且以数字结尾。
实现如下
public class RegexDemo { public static void main(String[] args) { String regex = "^1[3456789]\\d{9}$"; String phone = "15876578979"; //判断当前字符串对象是否匹配给定的正则表达式 //System.out.println(phone.matches(regex)); //对指定的表达式编译,获取一个编译器对象 Pattern p = Pattern.compile(regex); //对目标字符串获取匹配器 Matcher m = p.matcher(phone); //尝试匹配 boolean result = m.matches(); System.out.println(result); } }
基本语法
public class RegexDemo2 { public static void main(String[] args) { //判断指定字符是否是表达式中包含的其中一个 System.out.println("c".matches("[xyz]")); //是否不匹配指定的表达式 System.out.println("y".matches("[^xyz]")); //匹配内容是否是表达式中的其中一个字符? System.out.println("8".matches("[a-zA-Z0-9]")); //匹配数字 System.out.println("7".matches("[0-9]")); System.out.println("7".matches("\\d")); //匹配非数字 System.out.println("a".matches("[^0-9]")); System.out.println("b".matches("\\D")); //匹配空格或制表符 System.out.println(" ".matches("[ \t]")); //判断输入的字符串是否是5位数字 System.out.println("56432".matches("[0-9]{5}")); System.out.println("56432".matches("\\d{5}")); //判断输入的内容是否是英文字母和数字组合,并且长度在6-12之间? System.out.println("softeem123".matches("[0-9_a-zA-Z]{6,12}")); System.out.println("softeem123".matches("\\w{6,12}")); //验证输入的内容是否是5位长度以上的字符串?"."表示任何字符 System.out.println("你好世界softeem".matches(".{5,}")); //验证输入的内容是否是一个字符以上 System.out.println("中".matches(".+")); //编写一个邮箱地址的正则表达式? // softeem123@qq.com String regex = "\\w+@\\w+\\.\\w+"; System.out.println("softeem123@qq.cn".matches(regex)); //编写一个网址的正则表达式 // http://www.softeem.com // https://daily.softeem.top.cn; regex = "((http://)|(https://))((\\w+)|(\\.))+"; System.out.println("http://www.softeem.com.cn".matches(regex)); String phone = "姓名:XX;tel:13657872212"; System.out.println(phone.matches("^1[3456789]\\d{9}$")); } }
正则表达式的核心功能:
匹配
查找
替换