我们经常需要对字符串什么的进行判断(邮编、电话号码、ip等等等等),不可能一直使用contains来判断吧,这就用到了我们今天的主题正则表达式,下面我来讲一些简单的正则表达式

  • 字符集(注:下面这种正则表达式一般用来表达一个包含关系,就是说只要你要判断的字符串中只要满足这个规则就可以,我们就认定这个字符串符合要求)

    [1234]      表示 1,2,3,4之一

    [^1234]      表示 除了1,2,3,4

    [1-5]      表示 1,2,3,4,5

    [a-f]      表示 a-f之间

    [0-9a-fA-F]      表示 一个16进制字符

    0[xX][0-9a-fA-F]{1,8}      表示 整数的16进制表达式

    [\w-]{8-15}      表示 8-15个以字符、下划线、数字及“-”

    注:{x,y}表示长度范围是x到y

  • 预定字符集(一些特定的字符集)

    \d      表示 [0-9]

    .      表示 任意字符

    \w      表示 单词字符[0-9a-zA-Z_] (注:包含字符串)

    \s      表示 匹配空白:\t \n \r \b \p

    \D      表示 非数字

    \S      表示 非空白

    \W      表示 非单词字符

    {m,n}      表示 数词m到n个

    {n}      表示 数词n个,比如表示“5个以上”用{5,}

    ?      表示 能出现0到1次{0,1}

    +      表示 能出现1到n次{1, n}

    *      表示 能出现0到n次{0,}

  • 正则表达式以^开头, $结尾(这种就严格限制字符串必须符合规则,不再是包含关系)

  • 常用正则表达式写法

    1. 邮政编码

      ^[0-9][0-9][0-9][0-9][0-9][0-9]$  表示0-9的任意数字出现6次
      
      ^[0-9]{6}$  表示0-9的任意数字出现6次
      
      ^\d{6}$   表示0-9的任意数字出现6
    2. 用户名规则

      ^\w{6,12}$  表示可出现612个单词或字符
    3. 电话号码

      ^(\+86|0086)?\s?\d{11}$  表示可以以+86或者0086然后可能跟上一个空格的11位的电话号码
      
      注“+”是特殊字符需要转义,所以用"\+"
    4. 身份证号码

      ^\d{17}[0-9xX]$  表示17位数字加上一个数字或者x、X的身份证号码
    5. 一个点的坐标

      ^\d+(,\s*|\s+)\d+$  表示(x,y)或(x, y)或(x y)的位置坐标
    6. 日期(下面的表达式根据的格式要求:yyyy-MM-dd)

      ^\d{4}-\d{2}-\d{2}$  表示一个日期
      
      ^\d{4}[-\d{2}]{2}$  表示一个日期
案例测试:测试类
  package com.eicky;

  import java.util.Scanner;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;

  /**
   * Created with IntelliJ IDEA.
   * Author: Eicky
   * Date: 2017/5/17 19:32
   * Todo: regex test
   */

  public class Test {
      public static void main(String[] args) {
          Scanner scanner = new Scanner(System.in);
          while (true){
              System.out.println("please input your regex: ");
              Pattern pattern = Pattern.compile(scanner.nextLine());
              System.out.println("please input your text: ");
              Matcher matcher = pattern.matcher(scanner.nextLine());
              System.out.println(matcher.find());
          }
      }
  }

如果有错误的地方,还请指出.

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐