加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式

发布时间:2020-12-14 05:51:15 所属栏目:百科 来源:网络整理
导读:针对文本文件进行某个规则的校验,只能校验文本格式,不能对内容进行验证 意义: 用于第三方系统的数据格式校验 可以校验用户输入的文本格式 从数据库中匹配格式符合的数据 ? 1、普通字符:没有特殊含义的标点符号、数字、字母、下划线 2、转义字符:换行n

针对文本文件进行某个规则的校验,只能校验文本格式,不能对内容进行验证

意义:

  • 用于第三方系统的数据格式校验
  • 可以校验用户输入的文本格式
  • 从数据库中匹配格式符合的数据

?

1、普通字符:没有特殊含义的标点符号、数字、字母、下划线

2、转义字符:换行n、制表符t、回车r、以及有特殊符号的标点符号前面加上

3、标准字符集合:匹配所有数字d、(D取反)

       匹配所有数字字母下划线w、(W取反)

       匹配空格字符回车换行制表符s、(S取反)

       匹配除了换行以外的所有字符.

4、自定义字符集: 用 [? ?] 定义需要匹配的集合,除了匹配^需要加外,其余的符号写在[ ]里面都是表示匹配符号本身,比如,

       [0-5a-f]? 表示匹配0-5的数字和a-f的字符

       [^0-5a-f] 表示匹配除了0-5和a-f以外的内容

5、量词{? }:匹配元素内容的重复次数,比如

       {m}? 表示[ ]里面的内容需要匹配m次

       {m,n}? 表示[ ]里面的内容至少需要匹配m次,最多只能匹配n次

       {m,}? 表示[ ]里面的内容最少要匹配m次,没有最多次数限制

       ?? 表示匹配0次或者1次(等价于{0,1})

       +? 表示匹配最少1次? (等价于{1,})

       *? 表示匹配0次或者任意次? (等价于{0,})

注意:定义量词时我们一般常用贪婪模式,即匹配的字符越多越好;而非贪婪模式就是匹配最少次数,在量词后面加?即可实现。默认采用贪婪模式

6、字符边界(也称零宽)

      b? 匹配的是单词结尾

      B? 匹配的是除了结尾的全部

      ^? ?放在开头,表示匹配以某内容开始的字符串

      $? 放在末尾,表示匹配以某内容结尾的字符串

7、选择符和分组

      |? ?表示或

      ( )? ?用括号起来的部分就是分了组

注:分组有捕获式分组和非捕获式分组,其中捕获式分组会缓存捕获的内容,用“编号”的方式获得捕获内容,放在表达式之后;非捕获式分组不会缓存内容,用“?:”的方式选择非捕获式分组,放在表达式之前。一般推荐使用费捕获式分组,这样不会占用内存

8、预搜索

      (?=pattern) 正向肯定预查 断言自身出现的位置后面能跟哪些元素

例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。


      (?!pattern) 正向否定预查 断言自身出现的位置后不能跟哪些元素
例如:"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。


      (?<=pattern) 反向肯定预查 与正向肯定预查类拟,只是方向相反。
例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。

      (?<!pattern) 反向否定预查,与正向否定预查类拟,只是方向相反。
例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。

?

实例

匹配一个IP地址:

    (((?:[1-9]d?)|(?:1[0-9]2)|(?:2[0-4][0-9])|(?:25[0-5]))[.]){3}((?:[1-9]d?)|(?:1[0-9]2)|(?:2[0-4][0-9])|(?:25[0-5]))

匹配密码是否符合格式:(必须同时包含数字、大小写字母、标点符号)

    (?=^.{6,8}$)(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*W+)(?!.*[^dWa-zA-Z])

匹配年月日:

    (d{2}|d{4})-((0?[1-9])|(1[0-2]))-((0?[1-9])|([12][0-9])|(3[01]))

匹配时间:

    (((0?|1)[0-9])|(2[0-3])):([0-5][0-9]):([0-5][0-9])

匹配座机号码:? ?

    ^0d{2}-[1-9]d{7}|^0d{3}-[1-9]d{6}? ?

?

eclipse操作:

      private static void idcard() {
        System.out.println("请输入四川省的身份证:");
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        String regex = "^51d{4}d{4}(?:0d|1[0-2])(?:0[1-9]|1d|2d|3[0-1])d{3}[0-9xX]";
      //判断用户的输入 是否满足身份证规则
        Pattern pattern = Pattern.compile(regex);//定义正则表达式的模板
        Matcher matcher = pattern.matcher(str);//将用户的输入与模板进行对比

        if(matcher.matches()) {
        System.out.println("√");
        return;
        }else {
        System.out.println("身份证格式不正确,请重新输入:");
        idcard();? // 输入不正确重新输入
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读