Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 257|回复: 0

[正则表达式学习]java正则表达式学习笔记1.1

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-31 00:00:32 | 显示全部楼层 |阅读模式
    主要撰写学习正则表达式的笔记,忘记从谁哪里学习的了,资料来源于网上,经过自己加工润色罢了,可以说是原创,也可以说不是原创,这些无所谓,
    重要的是:学习过、记录过、分享过。

    课程摘要 正则表达式可以用来:
    1)验证字符串是否符合指定特征。
    2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
    3)用来替换,比普通的替换更强大。    正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文章或者课程没有做到由浅入深地讲解,概念上没有注意先后顺序,给大家的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的
      
       
       
         
       

         
       
      
        为了使您更容易理解,本课程从最简单的概念开始讲解,再逐步进行深入。如果您是一名初学者,本课程将帮助您快速地入门正则表达式。如果你使用过正则表达式,并且有一定的经验,学习一下本课程,您将会发现一些曾被忽略的重要技巧。

    徒弟:师傅呀,我接到新任务,要过滤字符串,进行筛选,一个个对比,貌似好麻烦哟!
    师傅:都什么年代啦,你的效率低不低呀?用正则吧,,谁用谁知道好!

    1、什么是正则表达式
          在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
    参考网址:http://baike.baidu.com/view/94238.htm

    2、功能强大的文本处理语言
        正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。本书从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用、条件性求值和前后查找,等等。每章都为读者准备了许多简明又实用的示例,有助于全面、系统、快速掌握正则表达式,并运用它们去解决实际问题。

    3、相对传统文本处理的优势:
    1)、灵活
    2)、高效
    3)、强大
    4)、便捷

    4、正则表达式实例
    实例一:
    验证数字字符串
    要求:验证一个字符串是否全部由数字构成
    看个例子:
    传统的编程方式:

    1. public class GeneralNumTest {
    2. public static void main(String[] args) {
    3.   String[] values = new String[] { "10", "325678", "987799", "99999","amd", "nvdita", "86BF" };
    4.   for (String value : values) {
    5.    System.out.println("校验值:        " + value);
    6.    if (isOctNumber(value)) {
    7.     System.out.println("[" + value + "] 校验是数字");
    8.    }
    9.    if (isHexNumber(value)) {
    10.      System.out.println("[" + value + "] 校验是 16进制数字");
    11.    }
    12.   }
    13. }
    14. //16进制校验
    15.   private static boolean isHexNumber(String value) {
    16.     boolean result = true;  
    17.     for (int i = 0, j = value.length(); i < j; i++) {
    18.      char c = value.charAt(i);
    19.       if (c == "0" || c == "1" || c == "2" || c == "3" || c == "4" || c == "5" || c == "6"
    20.         || c == "7" || c == "8" || c == "9"|| c == "a" || c == "b" || c == "c" || c == "d"
    21.         || c == "e" || c == "f"|| c == "A" || c == "B" || c == "C" || c == "D" || c == "E"
    22.         || c == "F") {
    23.            continue;
    24.      }else{
    25.        result = false;
    26.       break;
    27.    }
    28.   }
    29.   return result;
    30. }
    31.   // 传统校验方式
    32.    private static boolean isOctNumber(String value) {
    33.     boolean result = true;
    34.     for (int i = 0, j = value.length(); i < j; i++) {
    35.       char c = value.charAt(i);
    36.       if (c == "0" || c == "1" || c == "2" || c == "3" || c == "4"|| c == "5" || c == "6"
    37.        || c == "7" || c == "8" || c == "9") {
    38.        continue;
    39.       }else{
    40.      result = false;
    41.      break;
    42.     }
    43.   }
    44.   return result;
    45. }
    46. }
    复制代码
    运行结果,这里就不展示了。
    正则表达式对数字字符串验证的解法:
    1. public class GeneralNumTest {
    2. public static void main(String[] args) {
    3.    String[] values = new String[] { "10", "325678", "987799", "99999","amd", "nvdita", "86BF" };
    4.    for (String value : values) {
    5.     System.out.println("校验值:        " + value);
    6.     if (isOctNumber(value)) {
    7.      System.out.println("[" + value + "] 校验是数字");
    8.     }
    9.     if (isHexNumber(value)) {
    10.      System.out.println("[" + value + "] 校验是 16进制数字");
    11.     }
    12.   }
    13. }
    14. private static boolean isHexNumber(String value) {
    15.   String validateRegx = Regexes.HEX_NUM_REGEX;
    16.   return value.matches(validateRegx);
    17. }
    18. private static boolean isOctNumber(String value) {
    19.   String validateRegx = Regexes.OCT_NUM_REGEX;
    20.   return value.matches(validateRegx);
    21. }
    22. }
    23. //依赖的Regexes:
    24. class Regexes {
    25. public static final String OCT_NUM_REGEX = "\d+";
    26. public static final String HEX_NUM_REGEX = "(?i)[0-9a-f]+";
    27. }
    复制代码
    运行结果:
    校验值: 10
    [10] 校验是数字
    [10] 校验是16进制数字
    校验值: 325678
    [325678] 校验是数字
    [325678] 校验是16进制数字
    校验值: 987799
    [987799] 校验是数字
    [987799] 校验是16进制数字
    校验值: 99999
    [99999] 校验是数字
    [99999] 校验是16进制数字
    校验值: amd
    校验值: nvdita
    校验值: 86BF
    [86BF] 校验是16进制数字

    实例二:
    验证email地址
    要求:验证一个字符串是否合法的email地址
    1. public class EamilTest {
    2. public static void main(String[] args) {
    3. String[] emails = new String[] { "testone@163.com","tt.one.next@163.com", "www.163.com@163-com.com",
    4. ".leemaster@163", "luckdog.com" };
    5. for(String email:emails){
    6.   System.out.println("验证的eamil是:"+email);
    7.   if(isValideEmail(email)){
    8.     System.out.println("["+email+"] 是有效的邮件地址");
    9.   }
    10. }
    11. }

    12. private static boolean isValideEmail(String email) {
    13.   return email.matches(Regexes.EMAIL_REGEX);
    14. }
    15. }
    16. class Regexes {
    17.   public static final String OCT_NUM_REGEX = "\d+";
    18.   public static final String HEX_NUM_REGEX = "(?i)[0-9a-f]+";
    19.   public static final String EMAIL_REGEX =
    20.   "(?i)(?<=\b)[a-z0-9][-a-z0-9_.]+[a-z0-9]@([a-z0-9][-a-z0-9]+\.)+[a-z]{2,4}(?=\b)";
    21. }
    复制代码
    运行结果:
    验证的eamil是:testone@163.com
    [testone@163.com] 是有效的邮件地址
    验证的eamil是:tt.one.next@163.com
    [tt.one.next@163.com] 是有效的邮件地址
    验证的eamil是:www.163.com@163-com.com
    [www.163.com@163-com.com] 是有效的邮件地址
    验证的eamil是:.leemaster@163
    验证的eamil是:luckdog.com



      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/31/000032125.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 01:08 , Processed in 0.393027 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表