正则表达式入门

本文通过一个示例介绍了正则表达式在提取文本中特定格式内容的应用,如四位数字的匹配。使用Pattern和Matcher类,演示了如何创建模式对象,创建匹配器并进行循环匹配,以及如何通过分组获取匹配到的子字符串。示例中展示了如何从文本中提取四位数字,并打印出每组匹配的结果。
摘要由CSDN通过智能技术生成

简单来说正则表达式是对字符串执行模式匹配的技术

模式对象Pattern,匹配器Matcher,在Pattern中指定匹配字符串的规则然后用Matcher进行匹配


循环匹配matcher.find()
什么是分组,比如 (\d\d)(\d\d) ,正则表达式中有() 表示分组
第 1 个()表示第 1 组,第 2 个()表示第 2 组...
1.根据指定的规则,定位满足规则的子字符串(比如1996)它会先找到1996这个四位数,然后根据()分成两组
 2.找到后,将子字符串的下标存入matcher的对象属性int[] groups例如1998
 groups[0]放的是起始下标,groups[1]放的是结束下标+1

groups[0]中的值就是0,groups[1]的值就是4,   [0,4)
 记录 1 组()匹配到的字符串"19" groups[2] = 0 groups[3] = 2,  [0,2)
 记录 2 组()匹配到的字符串"98" groups[4] = 2 groups[5] = 4,  [2,4)
 3.同时记录oldLast的值为字符串结束下标+1,下次执行find就会从上次的结束下标+1的位置开始

package November;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author 小小小白白白白
 */
public class Regular {
    public static void main(String[] args) {
        String content ="周星驰(Stephen Chow),1962年6月22日出生于香港,祖籍浙江省宁波市," +
                "中国香港影视男演员、导演、编剧、制作人、商人,毕业于无线电视艺员训练班。\n" +
                "1980年成为丽的电视台的特约演员,从而进入演艺圈。1981年出演个人首部电视剧" +
                "《IQ成熟时》。1988年将演艺事业的重心转向大银幕,并于同年出演电影处女作《捕风汉子》" +
                "。1990年凭借喜剧片《一本漫画闯天涯》确立其无厘头的表演风格;同年,因其主演的喜剧动" +
                "作片《赌圣》打破香港地区票房纪录而获得关注。1991年主演喜剧片《逃学威龙》,并再次打" +
                "破香港地区票房纪录 [1]  。1995年凭借喜剧爱情片《大话西游》奠定其在华语影坛的地位。" +
                "1999年自导自演的喜剧片《喜剧之王》获得香港电影年度票房冠军 [2]  。\n" +
                "2002年凭借喜剧片《少林足球》获得第21届香港电影金像奖最佳男主角奖、最佳导演奖 [3]  。2003年成为美国《时代周刊》封面人物 [4]  。2005年凭借喜剧动作片《功夫》获得第42届台湾电影金马奖最佳导演奖。2008年自导自演的科幻喜剧片《长江7号》获得香港电影年度票房冠军。2013年执导古装喜剧片《西游·降魔篇》,该片以2.18亿美元的票房成绩打破华语电影在全球的票房纪录 [5-6]  。2016年担任科幻喜剧片《美人鱼》的导演、编剧、制作人,该片以超过33亿元的票房创下中国内地电影票房纪录 [7-10]  。\n" +
                "演艺事业外,周星驰还涉足商界。1989年成立星炜有限公司。1996年成立星辉公司。2010年" +
                "出任比高集团有限公司执行董事 [11]  。";
        /*String content="私有地址(Private address)属于非注册地址,专门为组织机构内部使用。\n" +
                "以下列出留用的内部私有地址\n" +
                "A类 10.0.0.0--10.255.255.255\n" +
                "B类 172.16.0.0--172.31.255.255\n" +
                "C类 192.168.0.0--192.168.255.255";*/

        //提取文章中所有的英文单词
        //1. 先创建一个pattern对象,模式对象,可以理解成一个正则表达式对象
        //加号表示可以有多个
        Pattern pattern = Pattern.compile("[a-zA-z]+");

        //提取文章中所有的数字
        Pattern pattern = Pattern.compile("[0-9]+");

        //提取文章中所有的数字和英文单词
        Pattern pattern = Pattern.compile("([0-9])+|([a-zA-z]+)");

        //提取指定格式的内容
        Pattern pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d");


        //匹配所有四个数字

        //1. \\d 表示一个任意的数字,四个就表示一个四位数字
        String regStr = "(\\d\\d)(\\d\\d)";

        //2. 创建模式对象[即正则表达式对象]
        Pattern pattern = Pattern.compile(regStr);

        //3. 创建匹配器
        //说明:创建匹配器 matcher, 按照 正则表达式的规则 去匹配 content 字符串
        //matcher匹配器按照pattern(模式/样式),去content文本中匹配,返回Boolean
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()) {
            /**
             * matcher.group(0)
             * 根据groups[0]和groups[1]记录的位置,从content开始截取字符串并返回
             * 如果正则表达式有分组
             * group(0) 表示匹配到的子字符串
             * group(1) 表示匹配到的子字符串的第一组字串
             * group(2) 表示匹配到的子字符串的第 2 组字串
             * 分组的数不能越界
             */
            System.out.println("找到:"+matcher.group(0));
            System.out.println("第一组:"+matcher.group(1));
            System.out.println("第二组:"+matcher.group(2));
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1while(true){learn}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值