Java-初识正则表达式 以及 练习

这篇具有很好参考价值的文章主要介绍了Java-初识正则表达式 以及 练习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

什么是正则表达式?

1. 正则表达式---字符类(一个大括号匹配一个字符):

2. 正则表达式---预字符类(也是匹配一个字符):

正则表达式---数量词 (可以匹配多个字符):

正则表达式的练习 1:

习题一:

习题二:

习题三:

正则表达式的练习 2:

习题一:

习题二:

正则表达式 小结:


什么是正则表达式?


正则表达式的作用?

  • 在一段文中查找满足要求的内容(后面介绍)
  • 可以校验字符串是否满足一定的规则,并用来校验数据格式的的合法性。是一种校验字符串的规则如:

如可用来:校验用户名是否满足规则、校验密码是否满足规则、校验身份证是否满足规则、校验手机号 是否满足规则。等等

由一个例题引出正则表达式:

如:例题:

验证 QQ 号:

  • QQ号码必须是 6--20 位长度
  • 而且必须全部是数字
  • 而且首位不能为0

按照以前的方法我们是这样的写的:

public class RegexDemo {
    public static void main(String[] args) {
        String qq = "2233445566";
        boolean check = check(qq);
        System.out.println(check);
    }
    //校验的方法
    public static boolean check(String qq) {
        int len = qq.length();
    if (len >= 6 && len <= 20) {
        if (!qq.startsWith("0")) {
            for (int i = 0; i < qq.length(); i++) {
                if (!(qq.charAt(i) >= '0' && qq.charAt(i) <= '9')) {
                    return false;
                }
            }
            return true;
        }
    }
    return false;
    }
}

上面的核心思想:

通过不断嵌套满足题目条件,

或也可以先把异常数据进行过滤,最后就是满足条件的数据,return true

明显代码很繁琐,这时我们就可以使用正则表达式来简化代码

String qq = "2233445566";
System.out.println(qq.matches("[1-9]\\d{5,19}"));
// [1-9] 表示必须以1-9的数字开头
//  \\d{5,19}表示任意数字至少出现5次,至多出现19次

APi 查找规则位置:

Java-初识正则表达式 以及 练习,java,正则表达式


1. 正则表达式---字符类(一个大括号匹配一个字符):

Java-初识正则表达式 以及 练习,java,正则表达式

解释:

  • 第 3 和 4 其实是一样的,
  • [ad-z]:表示:a 或 d 到 z
  • 代码理解:
//只能是a b c其中之一
System.out.println("-----------1-------------");
System.out.println("a".matches("[abc]")); // true
System.out.println("z".matches("[abc]")); // false

//不能出现a b c
System.out.println("-----------2-------------");
System.out.println("a".matches("[^abc]")); // false
System.out.println("z".matches("[^abc]")); // true
System.out.println("zz".matches("[^abc]")); //false
System.out.println("zz".matches("[^abc][^abc]")); //true


// a到z或A到Z(包括头尾的范围)
System.out.println("-----------3-------------");
System.out.println("a".matches("[a-zA-Z]")); // true
System.out.println("z".matches("[a-zA-Z]")); // true
System.out.println("aa".matches("[a-zA-Z]"));//false
System.out.println("zz".matches("[a-zA-Z]")); //false
System.out.println("zz".matches("[a-zA-Z][a-zA-Z]")); //true
System.out.println("0".matches("[a-zA-Z]"));//false
System.out.println("0".matches("[a-zA-Z0-9]"));//true

// [a-d[m-p]] a到d,或m到p   和上面一个意思
System.out.println("-----------4-------------");
System.out.println("a".matches("[a-d[m-p]]"));//true
System.out.println("d".matches("[a-d[m-p]]")); //true
System.out.println("m".matches("[a-d[m-p]]")); //true
System.out.println("p".matches("[a-d[m-p]]")); //true
System.out.println("e".matches("[a-d[m-p]]")); //false
System.out.println("0".matches("[a-d[m-p]]")); //false

// [a-z&&[def]] a-z和def的交集。为:d,e,f
System.out.println("----------5------------");
System.out.println("a".matches("[a-z&[def]]")); //false
System.out.println("d".matches("[a-z&&[def]]")); //true
System.out.println("0".matches("[a-z&&[def]]")); //false

// [a-z&&[^bc]] a-z和非bc的交集。(等同于[ad-z])
System.out.println("-----------6------------_");
System.out.println("a".matches("[a-z&&[^bc]]"));//true
System.out.println("b".matches("[a-z&&[^bc]]")); //false
System.out.println("0".matches("[a-z&&[^bc]]")); //false

// [a-z&&[^m-p]] a到z和除了m到p的交集。(等同于[a-1q-z])
System.out.println("-----------7-------------");
System.out.println("a".matches("[a-z&&[^m-p]]")); //true
System.out.println("m".matches("[a-z&&[^m-p]]")); //false
System.out.println("0".matches("[a-z&&[^m-p]]")); //false

注意 5 中的第一个:

&不能单独使用,

会被当成字符


2. 正则表达式---预字符类(也是匹配一个字符):


在介绍与预字符类前介绍一下转义字符

\ 可改变后面那个字符原本的含义:

  • 如:

双引号在 java 中表示字符串的开头和结尾

若要打印一个双引号就要使用 \ 来将双引号转义成一个普通的双引号(不含任何含义)

  • 如:

要打印一个 \(不含任何含义),可在它前再加一个 \ 进行转义,如 \\

总之记住两个 \\ 代表一个 \

....

转义字符以后再谈

System.out.println(""")// 报错
System.out.println("\"");// "
System.out.println("\\");// \

回过 头来:

Java-初识正则表达式 以及 练习,java,正则表达式

注意

  • 区分大小写
  • 书写时要写 \\

  • 代码理解:
//.表示任意一个字符
System.out.println("你".matches("..")); //false
System.out.println("你".matches(".")); //true
System.out.println("你a".matches(".."));//true


// \\d 表示任意的一个数字(只能是一位)
// 简单来记:两个\表示一个\
System.out.println("a".matches("\\d")); // false
System.out.println("3".matches("\\d")); // true
System.out.println("333".matches("\\d")); // false



//\\w只能是一位单词字符[a-zA-Z_0-9]
System.out.println("z".matches("\\w")); // true
System.out.println("2".matches("\\w")); // true
System.out.println("21".matches("\\w")); // false
System.out.println("你".matches("\\w"));//false
System.out.println("A9".matches("\\w\\w"));//true

// 非单词字符
System.out.println("你".matches("\\W")); // true
System.out.println("---------------------------------------------");

注意以上的正则匹配只能校验单个字符

3.正则表达式---数量词 (可以匹配多个字符):

Java-初识正则表达式 以及 练习,java,正则表达式

注意要和前面的 X 配套使用

代码理解:

// 必须是数字 字母 下划线 至少 6位
System.out.println("4Aa0_A".matches("\\w{6,}"));//true
System.out.println("4Aa".matches("\\w{6,}"));//false

 必须是数字和字符 必须是4位
System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));//true
System.out.println("23_F".matches("[a-zA-Z0-9]{4}"));//false
System.out.println("23dF".matches("[\\w&&[^_]]{4}"));//true
System.out.println("23_F".matches("[\\w&&[^_]]{4}"));//false

正则表达式的练习 1:

需求 请编写正则表达式验证用户输入的手机号码是否满足要求。请编写正则表达式验证用户输入的座机号码是否满足要求。请编写正则表达式验证用户输入的邮箱号是否满足要求。


技巧先拿着正确数据,将数据分成不同部分,

从左到右依次写规则


习题一:

  • 正确手机号码

13112345678

13712345667

13945679027

139456790271

手机号要求:

  • 1 开头
  • 第二个数是: 3-9
  • 一共 11 位

示例:


String regex="[1][3-9]\\w{9}";
System.out.println("15327998608".matches(regex));//true
System.out.println("12179986090".matches(regex));//false
System.out.println("11179986090".matches(regex));//false
System.out.println("151799860909".matches(regex));//false
System.out.println("05179986090".matches(regex));//false

习题二:

  • 正确座机电话号码

020-2324242

02122442

027-42424

0712-3242434

座机号码要求:

  • 第一部分:区号
  • 以 0 开头:
  • 3 或 4 位:
  • 0\\d{2,3}
  • 第二部分:-
  • - ? (表示-可出现 0 次或 1 次)
  • 第三部分:号码
  • 不能以 0 开头
  • 号码长度 5-10 位
  • [1-9]\\d{4-9}

表达式如下:

String regex2="0\\d{2,3}-?[1-9]\\d{4-9}"
....

习题三:

  • 正确邮箱号码

3232_323@qq.com

zhan_gsan@itcast.cnn

dlei0009@163.com

dlei0009@pci.com.cn

邮箱地址要求:

  • 第一部分:@的左边
    • \\w+ (表示任意字母数字下划线,至少出现一次)
  • 第二部分:@
    • @ (表示只能出现一次)
  • 第三部分:
    • . 的左边 :[ \\w&&[^_] ] {2,6} (任意的字母加数字,总共出现2-6次(此时不能出现下划线)
    • . 和 右边:(\\.[a-z A-Z]{2-3}){1,2} (一个. 还有 大写字母,小写字母都可以,只能出现2-3次) 可出现 1 次或 2 次
String regex3="\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2-3}){1,2}"
....

注意这里的 ”点“的表示是

\\.


正则表达式的练习 2:

习题一:

用户名要求:

  • 大小写字母、数字、下划线一共 4-16 位
String regex="\\w{4,16}";
...

习题二:

身份证 简单要求:

  • 18 位
  • 不以 0 开头
  • 前 17 任意数
  • 最后一位可以是数字、X、x
String regex1="[1-9]\\d{16}(\\d|X|x)";//1
String regex2="[1-9]\\d{16}[\\dx]";//2
...

先学一招:

忽略大小写的书写方式:

String regex1="(?i)abc"//忽略abc大小写
System.out.println("ABc".matches(regex1));//true

String regex2="a(?i)bc"//忽略bc大小写
System.out.println("ABc".matches(regex1));//false

这时我们就可以改写上面的身份证检验练习:

String regex1="[1-9]\\d{16}(\\d|(?i)x)";

小细节:

若(?i) 被当作工具了

Java-初识正则表达式 以及 练习,java,正则表达式

i 的字体会改变


身份证的严格校验:

  • 前六位:省份,市区,派出所等信息
  • 第一位不能是 0
  • 后五位任意

[1-9]\\d{5}

  • 年份的前半段:18、19、20
  • 年的后半段:任意数字出现两次

(18|19|20)\\d{2}

  • 月份:01-09、或 10、11、12

(0[1-9] | 1[0-2])

  • 日:01-09、10-19、21-29 、30、31

( 0[1-9] | [12] \\d | 3[01] )

  • 后四位:前三位任意、最后一位可以是数字、X、x

\\d{3} [\\dXx]

最后拼接起来即可

正则表达式 小结:

Java-初识正则表达式 以及 练习,java,正则表达式

Java-初识正则表达式 以及 练习,java,正则表达式


正则表达式重要的是看得懂

AnyRule 插件


本章介绍了正则表达式,以及规则、校验字符串是否满足规则的重要作用。

下篇介绍第二个重要作用:在一段文本中查找满足要求的内容文章来源地址https://www.toymoban.com/news/detail-804545.html

到了这里,关于Java-初识正则表达式 以及 练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 正则表达式(Java)

    正则表达式是由一些特定的字符组成,代表一个规则,可以用来检验数据格式是否合法,也可以在一段文本中查找满足要求的内容。 如果使用代码检验数据是否正确: 使用正则表达式: String提供了一个匹配正则表达式的方法:  图片来源heimait \\\\d才会当成d使用 (?i)表示忽略大

    2024年02月20日
    浏览(40)
  • 正则表达式(JAVA)

    正则表达式在用于 校验信息 是否 满足某些规则 的时候,非常的好用 在 文本中查找 满足要求的内容 符号 作用 补充 [abc] 只能是a,b或c 匹配的一个字符只能是 [] 范围内的其中一个 [^abc] 除了a,b,c之外的任何字符 ^ 符号类似 非 [a-zA-Z] a到z A到Z ,包括范围 - 作用是由…到… ,两个或

    2024年02月10日
    浏览(31)
  • Java 正则表达式

    正则表达式的元字符可以大致分为六类: 限定符 选择匹配符 分组组合和反向引用符 特殊字符 字符匹配符 定位符 转义符 \\\\ 符号在检索某些特殊字符的时候可以使用,否则检索不到结果。 在Java中是 \\\\ ,而其他语言则是 。 一般 . * + ( ) $ / ? [ ] { } 都可能需要转义符 符号

    2024年02月21日
    浏览(103)
  • Java038——正则表达式

    正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“d”表示数字 0~9 中的任何一个,“d”就是元字符。正则表达式中的元字符及其意义下所示。 在

    2024年02月13日
    浏览(29)
  • Java 正则表达式匹配

    正则表达式: 定义一个搜索模式的字符串。 正则表达式可以用于搜索、编辑和操作文本。 正则对文本的分析或修改过程为:首先正则表达式应用的是文本字符串(text/string),它会以定义的模式从左到右匹配文本,每个源字符只匹配一次。 正则表达式 匹配 this is text 精确匹配

    2024年02月06日
    浏览(46)
  • JAVA中正则表达式

    接下来,学习一个全新的知识,叫做正则表达式。 正则表达式其实是由一些特殊的符号组成的,它代表的是某种规则。 正则表达式的作用1:用来校验字符串数据是否合法 正则表达式的作用2:可以从一段文本中查找满足要求的内容 5.1 正则表达式初体验 现在,我们就以QQ号码

    2024年01月20日
    浏览(40)
  • JAVA系列---正则表达式

    编号 元字符 匹配功能 1 . 匹配除换⾏符以外的任意字符 2 w 匹配字⺟或数字或下划线 3 s 匹配任意的空⽩符 4 d 匹配数字 5 n 匹配⼀个换⾏符 6 t 匹配⼀个制表符 7 ^ 匹配字符串的开始 8 $ 匹配字符串的结尾 9 W 匹配⾮字⺟或数字或下划线 10 D 匹配⾮数字 11 S 匹配⾮空⽩符

    2024年02月15日
    浏览(50)
  • Java的正则表达式

    正则表达式是一种强大的字符串匹配工具,可以在很多领域得到广泛使用。在Java中,正则表达式也被广泛应用于字符串匹配、查找和替换等方面。本文将介绍Java中常用的正则表达式语法以及其使用方法,供大家参考。 Java中使用正则表达式需要使用java.util.regex包中的类。其中

    2024年02月07日
    浏览(41)
  • 【Java 基础篇】Java 正则表达式

    正则表达式是一种强大的文本模式匹配工具,它可以帮助我们在文本中查找、替换和提取特定模式的内容。Java 提供了丰富的正则表达式支持,通过 java.util.regex 包中的类和方法,我们可以在 Java 程序中使用正则表达式进行字符串处理。 本篇博客将介绍 Java 正则表达式的基本

    2024年02月09日
    浏览(44)
  • JAVA Android 正则表达式

    正则表达式是对字符串执行模式匹配的技术。 如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为: 1、限定符 2、选择匹配符 3、分组组合和反向引用符 4、特殊字符 5、字符匹配符 6、定位符 元字符(Metacharacter)-转义号 \\\\ 符号说明: 在我

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包