Java通识基础23(正则表达式regular exprssion

一种工具,绝大部分好的语言都应该支持正则表达式

正则表达式的理解性定义:

是一个“字符串模板”,可以代表一批字符串

功能表与特性

通配符:

  • 每一个通配符都代表一个字符

  • .:代表任意一个字符

  • \d:代表任意一个数字——digit

  • \D:代表任意一个非数字

  • \w:代表任意一个单词字符——word

  • \W:代表任意一个非单词字符

  • \s:代表任意一个空白

  • \S:代表任意一个非空白字符——space

  • 范围通配符[a-d]:代表a、b、c、d其中的任意一个字符

  • 枚举通配符[adm]:代表a、d、m之中的任意一个字符

  • 范围和枚举共存的通配符[am4-6]:代表a、m、4、5、6其中的任意一个字符

  • 求否字符^

    • [^am4-6]:代表不是a、m、4、5、6其中的任意一个字符
    • [^a-d]:代表不是a、b、c、d其中的任意一个字符
    • [^adm]:代表a、d、m不是之中的任意一个字符
  • 求与字符&&

    • [a-g&&[^c-e]]:代表在a到g范围内又不是c-e的任意字符

出现频率运算符

  • ?:代表前面的字符出现0-1次

    • a?b:a只能出现0-1次,比如aab就不符合条件
  • *:前面的字符可以出现0-N次

    • a*b:a只能出现0-N次,比如aaaaabb
    • \d*5:以5为结尾出现的任意一串数字
  • +:前面的字符可以出现1-N次

    • a+b:a只能出现1-N次,比如aaaaab单独的b不符合条件
  • {m,n}:前面的字符出现m到n次

    • {m,}:前面的字符出现m到无限次
    • {,n}:前面的字符出现0到n次
    • {m}:前面的字符必须出现m次

成组

(abc){1,2}意义:小括号内是一个固定组合,不可以拆分

思考:((abc)|(123))*可否match abc1232123返回true

举例——身份证年份的正则表达式

\\{6}{{19\\d{2}}|{20[0,22]}};

Java对正则表达式的定义

引例

  1. public class Demo1 {
  2. public static void main(String[] args) {
  3. System.out.println("233".matches("^\\d+5$"));//双斜杠的目的是用于转义
  4. System.out.println("233432425".matches("^\\d+5$"));
  5. }
  6. }
  7. /*
  8. false
  9. true
  10. */

程序写入正则表达式的时候需要

  1. `^`作为开头
  2. `$`作为结尾

应用——正则表达式判断用户输入是否合法

  1. import java.util.Scanner;
  2. public class Example {
  3. public static void main(String[] args) {
  4. Scanner ID=new Scanner(System.in);
  5. String you="^1{1,3}0{1,3}2$";
  6. while (ID.hasNextLine())
  7. {
  8. String id=ID.nextLine();
  9. if(id.matches(you)){
  10. System.out.println("vic");
  11. }
  12. else {
  13. System.out.println("Wrong");
  14. }
  15. ; }
  16. }
  17. }
  18. /*
  19. 102
  20. vic
  21. 222
  22. Wrong
  23. */

Java对正则表达式的支持

String

matches(regex)方法:判断该字符串是否匹配正则表达式(上述例子已经展示)

split(regex)方法:根据指定分隔符将字符串分隔多段

replaceAll(regex,replacement):将regex替换成replacement(注意使用转义运算符)