正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)是从JDK 1.4引入到Java中的。本质上是一种字符串操作的语法规则,利用此语法规则可以更加灵活的实现字符串的匹配、拆分、替换等操作。
实现字符串的判断
public class TestDemo {
public static void main(String[] args) throws Exception {
String str = "123yootk";
System.out.println(str.matches("\\d+"));
}
}
正则标记
1、 单个字符(数量:1)
·字符:表示由一位字符所组成;
·\\:表示转义字符“\”;
·\t:表示一个“\t”符号;
·\n:匹配换行(\n)符号;
2、 字符集(数量:1)
·[abc]:表示可能是字符a或者是字符b或者是字符c中的任意一位;
·[^abc]:表示不是a、b、c中的任意一位;
·[a-z]:所有的小写字母;
·[a-zA-Z]:表示任意的一位字母,不区分大小写;
·[0-9]:表示任意的一位数字;
3、 简化的字符集表达式(数量:1)
·.:表示任意的一位字符;
·\d:等价于“[0-9]”,属于简化写法;
·\D:等价于“[^0-9]”,属于简化写法;
·\s:表示任意的空白字符,例如:“\t”、“\n”;
·\S:表示任意的非空白字符;
·\w:等价于“[a-zA-Z_0-9]”,表示由任意的字母、数字、_所组成;
·\W:等价于“[^a-zA-Z_0-9]”,表示不是由任意的字母、数字、_所组成;
4、 边界匹配:
·^:正则的开始;
·$:正则的结束;
5、 数量表达:
·正则?:表示此正则可以出现0次或1次;
·正则+:表示此正则可以出现1次或1次以上;
·正则*:表示此正则可以出现0次、1次或多次;
·正则{n}:表示此正则正好出现n次;
·正则{n,}:表示此正则出现n次以上(包含n次);
·正则{n,m}:表示此正则出现n ~ m次;
6、 逻辑运算:
·正则1正则2:正则1判断完成之后继续判断正则2;
·正则1 | 正则2:正则1或者是正则2有一组满足即可;
·(正则):将多个正则作为一组,可以为这一组单独设置出现的次数。
String类对正则的支持
实现字符串替换
public class TestDemo {
public static void main(String[] args) throws Exception {
String str = "hello*)(*()ww(*#mn*";
String regex = "[^a-z]"; // 此处编写正则
System.out.println(str.replaceAll(regex, "")); // 字符串替换
}
}
字符串拆分
public class TestDemo {
public static void main(String[] args) throws Exception {
String str = "ghmfg9mldghrnyo8798o5555tk";
String regex = "\\d+"; // [0-9]一位以上
String result[] = str.split(regex);
for (int x = 0; x < result.length; x++) {
System.out.println(result[x]);
}
}
}
验证一个字符串是否是数字,如果是则将其变为double型
public class TestDemo {
public static void main(String[] args) throws Exception {
String str = "10.10";
String regex = "\\d+(\\.\\d+)?";
if (str.matches(regex)) { // 转型之前要进行验证
System.out.println(Double.parseDouble(str));
}
}
}
判断给定的字符串是否是一个IP地址(IPV4)
public class TestDemo {
public static void main(String[] args) throws Exception {
String str = "192.168.1.1";
String regex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
System.out.println(str.matches(regex));
}
}
给定一个字符串,要求判断其是否是日期格式,如果是则将其转换为Date型数据
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDemo {
public static void main(String[] args) throws Exception {
String str = "2013-08-15";
String regex = "\\d{4}-\\d{2}-\\d{2}"; // 定义验证规则
if (str.matches(regex)) { // 符合规则
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(str);
System.out.println(date);
}
}
}
判断电话号码
Ø 一般要编写电话号码以下几种格式都是满足的:
Ø 格式一:51283346,一般长度是7 ~ 8位的数字是电话号码(正则格式为:“\\d{7,8}”);
Ø 格式二:010-51283346,区号一般是3 ~ 4位,而且区号和电话之间的“-”只有在出现区号时才出现 (正则格式“\\d{3,4}-)?\\d{7,8}”;
Ø 格式三:(010)-51283346,其中在区号前的括号必须成对出现,这样就需要将括号与区号一起显示(正则格式:“((\\d{3,4}-)|(\\(\\d{3,4}\\)-))?\\d{7,8}”)。
public class TestDemo {
public static void main(String[] args) throws Exception {
String str = "(010)-51283346";
String regex = "((\\d{3,4}-)|(\\(\\d{3,4}\\)-))?\\d{7,8}";
System.out.println(str.matches(regex));
}
}