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入门到精通教程
查看: 319|回复: 0

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

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

    [LV.1]初来乍到

    发表于 2014-10-31 00:00:27 | 显示全部楼层 |阅读模式
    1. 捕获分组的注意事项:
    2. 只要使用了括号,就存在捕获分组
    3. 捕获分组按照开括号出现的从左到右的顺序编号,遇到括号嵌套的情况也是如此
    4. 如果捕获分组之后存在量词,则匹配结果中,捕获分组保存的是子表达式最后一次匹配的字符串
    5. 例子:

    6. import java.util.regex.Matcher;
    7. import java.util.regex.Pattern;
    8. public class GeneralSix {
    9. public static void main(String[] args) {
    10.   String email = "abacdemasterhappy@163.com";
    11.   String regex = "((\w+)@([\d\.\w]+))";
    12.   Pattern p = Pattern.compile(regex);
    13.   Matcher m = p.matcher(email);
    14.    if(m.find()){
    15.     System.out.println("匹配结果:        " + m.group(0));
    16.     System.out.println("分组1:        " + m.group(1));
    17.     System.out.println("分组2:        " + m.group(2));
    18.     System.out.println("分组3:        " + m.group(3));
    19.     }
    20. }
    21. }

    复制代码
    运行结果:
    匹配结果: abacdemasterhappy@163.com
    分组1: abacdemasterhappy@163.com
    分组2: abacdemasterhappy
    分组3: 163.com

    String regex = "((\w+)@([\d\.\w]+))";
    只是在正则表达式的两端添加了一个( ),此时出现括号嵌套的情况。
    依照括号从左到右的顺序,发现,第一个括号对应整个正则表达式,第二个对应用户名正则表达式,第三个括号用于匹配主机名的正则表达式。
    再看一个:

    1. import java.util.regex.*;
    2. public class GeneralSeven {
    3. public static void main(String[] args) {
    4.   String email = "abacdemasterhappy@163.com";
    5.   String regex = "(\w)+@([\d\.\w])+";
    6.   Pattern p = Pattern.compile(regex);
    7.   Matcher m = p.matcher(email);
    8.   if(m.find()){
    9.    System.out.println("匹配结果:        " + m.group(0));
    10.    System.out.println("分组1:        " + m.group(1));
    11.    System.out.println("分组2:        " + m.group(2));
    12.    //System.out.println("分组3:        " + m.group(3));
    13.    }
    14. }
    15. }
    复制代码
    运行结果:
    匹配结果: abacdemasterhappy@163.com
    分组1: y
    分组2: m

    将量词作用整个捕获分组。匹配完成之后,捕获分组所保存的就是最后一次它所匹配的文本。
    abacdemasterhappy@163.com
    相当于匹配用户名的最后一个字符。
    捕获分组的事项讲解到此!

    不捕获文本的括号
    如果正则表达式很复杂,或者需要处理的文本很长,捕获分组会降低效率
    作用:仅仅用来对表达式分组,而不把分组捕获的文本存入结果
    形式:
    (?:...)
    注意:不捕获文本的括号,并不是所有语言都有提供,为了增加可读性,并不推荐使用“不捕获文本的括号”。
    例子:

    1. import java.util.regex.*;
    2. public class GeneralEight {
    3. public static void main(String[] args) {
    4.   String email = "abacdemasterhappy@163.com";
    5.   String regex = "(?:abacdemasterhappy|admin)@(163.com)";
    6.   Pattern p = Pattern.compile(regex);
    7.   Matcher m = p.matcher(email);
    8.   if(m.find()){
    9.    System.out.println("匹配结果:        " + m.group(0));
    10.    System.out.println("分组1:        " + m.group(1));
    11.   }
    12. }
    13. }
    复制代码
    运行结果:
    匹配结果: abacdemasterhappy@163.com
    分组1: 163.com

    括号的用途:反向引用
    作用:在表达式的某一部分,动态重复之前子表达式所匹配的文本
    形式:1
    例子:

    1. public class GeneralNine {
    2.   public static void main(String[] args) {
    3.   String[] strs = new String[] { "< h1>good,good< /h1>", "< h1>bad< /h2>"};
    4.   String regex = "< \w+>[^<]+< /\w+>";
    5.   for (String string : strs) {
    6.    if(regexMatch(string,regex)){
    7.      System.out.println(string +"能够匹配正则:" + regex);
    8.    }else{
    9.      System.out.println(string +"不能够匹配正则:" + regex);
    10.    }
    11. }
    12. }
    13.   private static boolean regexMatch(String s, String regex) {
    14.    return s.matches(regex);
    15.   }
    16. }
    复制代码
    运行结果:
    <h1>good,good</h1>能够匹配正则:<w+>[^<]+</w+>
    <h1>bad</h2>能够匹配正则:<w+>[^<]+</w+>

       
         
         
          
          

            
          

            
          
         
       

      
      
       
      


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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-25 19:17 , Processed in 0.300230 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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