常用正则表达式和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对正则表达式的支持除特别复杂正则



猜你喜欢

转载自blog.csdn.net/qq_42056595/article/details/80154921