常用正则表达式和String对正则表达式的支持

正则表达式

本篇笔记记录了关于常用的正则表达式和Java里String对正则表达式的支持

正则的概念:JDK1.4之后引入的Java中,所有的正则支持的类都定义在java.util.regex包里面。

     重点:正则标记

所有正则可以用的使用的标记都在java.unti.regex.Pattern类里边。

1、     单个字符(数量:1)

  •   字符:表示由一位字符组成 ; x
  •    \\ 表示转义字符 “\”
  •    \t 表示一个 “\t”符号
  •    \n 匹配换行 (\n)符号

2、字符集(数量1)

  •    [abc] 表示可能是字符a或b或c的任意一位
  •    [^abc] 表示不是a、b、c中的任意一位
  •    [a-z]: 表示所有的字母必须小写
  •    [a-Za-Z] 表示任意的一位字母,不区分大小写
  •    [A-Z]表示所有的字母必须大写
  •    [0-9]表示0到9之中的任意一个数字

3.简化的字符集表达式(数量1)

  •    .表示任意的一位字符
  •    \d 等价于”[0-9]”,属于简化写法
  •    \D 等价于 [^0-9] 匹配一个非数字字符
  •    \s 表示任意空白字符,例如 : \t  \n
  •    \S 表示任意的非空白字符,例如:\T
  •    \w 等价于[a-zA-z_0-9] 表示由任意字母、数字组成
  •    \W 等价于[^a-zA-z_0-9] 表示不是由任意字母、数字组成

4.便捷匹配(不要在Java中使用,在JavaScript中使用):

  •    ^ 正则的开始
  •    $ 正则的结束

5、数量表达

  •    正则? 表示此正则可以出现0或者1次
  •    正则 + 表示此正则可以出现1次或1次以上(不能出现0次)
  •    正则 * 表示此正则可以出现0次 1次或者多次
  •    正则 {n} 表示此正则刚好出现n次
  •    正则 {n,} 表示此正则刚好出现n次或者n次以上
  •    正则{n,m} 表示正则刚好出现n~m次 包含n m

6、 逻辑运算

  •  正则1正则2 正则1判断完成之后继续判断正则2;
  •  正则 | 正则2 正则1或者正则2有一组满足即可;
  •  (正则)  将多个正则作为一组,可以为这一组单独设置出现的次数;

 

String类对正则的支持

在JDK1.4之后由于正则的引入String类也增加了新的操作方法支持。

序号

方法名称

类型

描述

1

public boolean matches(String regex)

普通

正则验证,使用指定的字符串判断其是否给出的正则表达结构

2

public String replaceAll(String regex,String replacement)

普通

全部替换

3

public String replaceFirst(String regex,String replacement)

普通

替换首个

4

public String[] split(String regex)

普通

全部拆分

5

public String[] split(String regex,int limit)

 

部分拆分

Split示例:

public class TestDemo {
   
public static void main(String[] args) {
       
String str = "afaf235235dad2421wrrt";
       
String regex = "\\d+"//0-9 的数字可以出现1次或者1次以上
       
String result[] = str.split(regex);     //拆分所有匹配正则的
       
for (int i = 0; i < result.length; i++) {
           
System.out.println(result[i])//循环输拆分后的字母
       
}
    }
}

示例:验证一个字符串会否是数字,如果是则将其变为doulbe类型

数字可能是整数(10)也可能是小数(10.2);

 

class TestDemo2{
   
public static void main(String[] args) {
       
String str = "10.1";
       
String regex = "\\d+\\.\\d+";
       
System.out.println(str.matches(regex));
       
if (str.matches(regex)){    //验证是否符合正则表达式
           
System.out.println(Double.parseDouble(str));
       
}
    }
}

 

范例:判断给定的字符串是否是一个IP地址(IPV4)

IP地址192.168.1.1,每一个字段最长度是3 (1-3个长度都可以)。

class TestDemo3{
   
public static void main(String[] args) {
       
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类型

class TestDemo4{
   
public static void main(String[] args) throws ParseException {
       
String str = "2009-23-23";
       
String regex = "\\d{4}-\\d{2}-\\d{2}";
       
System.out.println(str.matches(regex));
        
if (str.matches(str)){
           
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(str);
           
System.out.println(date);
       
}
    }
}

 

示例:验证email地址

       用户名要求由数字、字母、_组成,其中必须以字母开头,结尾可以有字母和数字,用户名最多不超过30位,最后的根域名只能够是.com.net.cn    com.cn  net.cn .edu  .gov  .org

class TestDemo5{
   
public static void main(String[] args) {
       
String str = "[email protected]";
       
String regex = "[a-zA-Z][a-zA-Z0-9_\\.]{1,28}[a-zA-Z0-9]@\\w+\\.(net|cn|com|com\\.cn|net\\.cn|org|gov|edu)";
       
System.out.println(str.matches(regex));
   
}
}

 

关于java正则表达式的应用大多数情况都是在用String对正则表达式的支持除特别复杂正则

你可能感兴趣的:(雀雀学Java基础篇)