• 人生第一篇——正则表达式


        作为一名菜鸟,第一次写博客,难免有些激动,不安,写的有什么问题,还希望大神们多指点!

        由于之前一直是用的时候才百度上搜索一下,相关字符语法,想想还是趁着这次需要,全部整理一下的,以备不时之需!顺便再熟悉一下。

        为什么会用到正则表达式呢,还不是工作需要!任务是需要从日志中找出(手机号,身份证号,银行卡号,邮箱等)敏感信息!能想到的也唯有正则表达式了。

        正则表达式功能强大,用的好可以减少很多很多很多工作,不论前端,后台!就是用这些简简单单的语法,自由组合拼凑出一个完整的世界。简直不能太美好。

    废话了这么多,下来看看正则字符(从菜鸟教程抓来的):

    1 非打印字符
    2 f    匹配换页符
    3 
        匹配换行符
    4 
        匹配回车符
    5 s    匹配任何空白字符,空格,制表符,换页符等。等价于【f
    
    	v】
    6 S    匹配任何非空白字符
    7 	    匹配一个制表符
    8 v    匹配一个垂直制表符
     1 特殊字符
     2 $    结束字符
     3()   标识子表达式
     4 ?    匹配 0 或者 1 个字符
     5 .    匹配任意一个字符
     6 *    匹配 0 个 或者 多个字符
     7 ^     表示匹配开始,中括号里标识 非
     8 +     匹配多个
     9 [     中括号表达式  [1-9][0-9]+  匹配数字
    10 {     限定符的开始   o{0,1} 等价于o? 匹配 前面字符 0或者1次
    11 |     指明两项之间的选择

    1 定位符
    2      匹配一个单词边界,即字与空格间的位置。
    3 g      正则表达式后面的全局标记 g 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。
    4 i      不区分大小写
    5 d     匹配数字
    6 D     匹配非数字
    7 w     匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'

    在线测试工具:http://tool.chinaz.com/regex/

    再看一下java版本的正则使用方法:

     
    //拼写正则表达式
    1
    private String getMessageByPattern(String inputMessage){ 2 long beginTime = new Date().getTime(); 3 /******************************手机号正则开始*****************************/ 4 String phone = "0?(13|14|15|17|18|19)[0-9]{9}"; 5 Pattern ptPhone = Pattern.compile(phone); 6 //用于测试的输入字符串 7 //System.out.println("Input:" + inputMessage); 8 inputMessage = matchAndReplace(inputMessage, ptPhone); 10 11 /******************************身份证号正则开始*****************************/ 12 String idcard = "/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/"; 13 Pattern ptCard = Pattern.compile(idcard); 14 inputMessage = matchAndReplace(inputMessage, ptCard); 15 16 /******************************邮箱正则开始*****************************/ 17 String email = "\w[-\w{1,2}]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}"; 18 Pattern ptemail = Pattern.compile(email); 19 inputMessage = matchAndReplace(inputMessage, ptemail); 20 21 /******************************银行卡号正则开始*****************************/ 22 //FIXME 如果有卡bin大全,这里应该更复杂一些,不过也是匹配开头的几位数 23 String bankcard = "([1-9]{1})(\d{12,18})"; 24 Pattern ptcard = Pattern.compile(bankcard); 25 inputMessage = matchAndReplace(inputMessage, ptcard); 26 long endTime = new Date().getTime(); 27 return inputMessage; 28 }

     //拿出匹配项,并且替换 
    1
    private static String matchAndReplace(String inputPhone,Pattern p){ 2 Matcher m = p.matcher(inputPhone); 3 while(m.find()){ 4 //System.out.println(m.group()); 5 String value = m.group(); 6 String replace = ""; 7 if(value.length() <=11){ 8 replace = value.substring(0,2)+"***"+value.substring(5, 7); 9 }else{ 10 replace = value.substring(0,3)+"*****"+value.substring(8, 11); 11 } 12 inputPhone = inputPhone.replaceAll(value, replace); 13 //System.out.println(inputPhone); 14 } 15 return inputPhone; 16 }

        接下来调用 getMessageByPattern(formattedMessage)方法就可以啦~~~ 

                 例子中的正则,完全可以根据正则字符读懂!

                 每一个正则表达式,都在那么几十个正则字符中变幻,看似很简单,但总会惧怕。

                 不下手你永远不知道,其实它确实很繁琐。

                 不下手你永远不知道,原来你也能掌握!

      

  • 相关阅读:
    php环境配置中各个模块在网站建设中的功能
    PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置
    August 17th 2017 Week 33rd Thursday
    August 16th 2017 Week 33rd Wednesday
    August 15th 2017 Week 33rd Tuesday
    August 14th 2017 Week 33rd Monday
    August 13th 2017 Week 33rd Sunday
    August 12th 2017 Week 32nd Saturday
    August 11th 2017 Week 32nd Friday
    August 10th 2017 Week 32nd Thursday
  • 原文地址:https://www.cnblogs.com/10fly/p/9873054.html
Copyright © 2020-2023  润新知