• java 正则表达式(Pattern ,Matcher)的使用


    写了一个语法分析器,用到了,Pattern,Matcher

    (1)正则表达式及其含义
    字符
    x 字符 x
    反斜线字符
    n 八进制值的字符0n (0 <= n <= 7)
    nn 八进制值的字符 0nn (0 <= n <= 7)
    mnn 八进制值的字符0mnn 0mnn (0 <= m <= 3, 0 <= n <= 7)
    xhh 十六进制值的字符0xhh
    uhhhh 十六进制值的字符0xhhhh
    制表符(‘u0009’)
    换行符 (‘u000A’)
    回车符 (‘u000D’)
    f 换页符 (‘u000C’)
    a 响铃符 (‘u0007’)
    e 转义符 (‘u001B’)
    cx T对应于x的控制字符 x

    字符类
    [abc] a, b, or c (简单类)
    [^abc] 除了a、b或c之外的任意 字符(求反)
    [a-zA-Z] a到z或A到Z ,包含(范围)
    [a-z-[bc]] a到z,除了b和c : [ad-z](减去)
    [a-z-[m-p]] a到z,除了m到 p: [a-lq-z]
    [a-z-[^def]] d, e, 或 f
    备注:
    方括号的正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”,只能匹配单个字符。
    圆括号,因为方括号只允许匹配单个字符;故匹配多个字符时使用圆括号“()”。比如使用“t(a|e|i|o|oo)n”正则表达式,就必须用圆括号。

    预定义的字符类
    . 任意字符(也许能与行终止符匹配,也许不能) 备注:句点符号代表任意一个字符。比如:表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”。
    d 数字: [0-9]
    D 非数字: [^0-9]
    s 空格符: [ x0Bf ]
    S 非空格符: [^s]
    w 单词字符: [a-zA-Z_0-9]
    W 非单词字符: [^w]

    表达次数的符号
    符号 次数
    * 0次或者多次
    + 1次或者多次
    ? 0次或者1次
    {n} 恰好n次
    {n,m} 从n次到m次
    详情点击;
    http://edu.yesky.com/edupxpt/18/2143018.shtml

    (2)pattern:java类,正则表达式匹配模式,私有构造方法,不可直接创建,要用简单工厂方法创建Pattern.complie(String regex)
    例如:Pattern p=Pattern.compile(“w+”);
    方法:<1>p.pattern();返回字符串regex
    <2>Pattern.split(CharSequence input) 以pattern字符串模式分割字符串input,并返回String[]
    <3>Pattern.matcher(String regex,CharSequence input)是一个静态方法,用于快速匹配字符串input,该方法适合用于只匹配一次,且匹配全部字符串,返回true/false
    例: Pattern.matches(“d+”,”22”);//返回true
    Pattern.matches(“d+”,”22aaa”);//返回false
    <4>Pattern.matcher(CharSequence input) 返回一个Matcher对象.
    (3)Matcher 对象
    方法:
    <1>Matcher.matches()返回boolean ,对整个字符串进行匹配,
    例:
    Pattern p=Pattern.compile("\d+");
    Matcher m=p.matcher("22bb");
    m.matches();//返回false

    <2>Matcher.lookingAt()返回boolean ,对字符串的最前边进行匹配

    Pattern p=Pattern.compile("\d+");
    Matcher m=p.matcher("bb33");
    m.matches();//返回false

    <3>Matcher.find() 返回boolean ,只要字符串中有满足字符串的项,便匹配
    例:
    Pattern p=Pattern.compile("\d+");
    Matcher m=p.matcher("bbaa"); //没有匹配的项
    m.matches();//返回false

    <4>Matcher.group()返回匹配到的子字符串
    例:
    Pattern p=Pattern.compile("([a-z]+)(\d+)([a-z]+)");
    Matcher m=p.matcher("aaa2345bb");
    m.find(); //匹配aaa2345bb
    m.groupCount(); //返回3,因为有3组,3个括号
    m.group(1) //返回aaa
    m.group(2) //返回2345
    m.group(3) //返回bb

    输出所有匹配结果:

    while(m.find()) { 
         System.out.println(m.group()); 
    } 
  • 相关阅读:
    直播分享| 腾讯云 MongoDB 智能诊断及性能优化实践
    解决方案| MongoDB PSA 架构痛点以及如何应对?
    行业案例 | MongoDB 在 QQ 小世界 Feed 云系统中的应用及业务架构优化实践
    活动报名 | MongoDB 5.0 时序存储特性介绍
    行业报告| 请查收 2022 MongoDB 数据与创新报告
    解决方案、线上活动| MongoDB Page Fault 的发现与解决、腾讯云 MongoDB 智能诊断及优化实践
    行业案例| 千亿级高并发MongoDB集群在某头部金融机构中的应用及性能优化实践(上)
    公司的午休神器,随时关闭电脑屏幕
    golang项目中使用异步任务
    统计程序耗时神器
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551267.html
Copyright © 2020-2023  润新知