• Java正则表达式学习与记录


    转载自:http://www.runoob.com/java/java-regular-expressions.html

    正则表达式定义了字符串的模式,用于搜索、编辑或处理文本。

    1、正则表达式中字符意义:

                将下一字符标记为特殊字符。

    ^           匹配输入字符串开始的位置。

    $           匹配输入字符串结束的位置。

    *           零次或多次匹配前面的字符或子表达式。

    +           一次或多次匹配前面的字符或子表达式。

    ?           零次或一次匹配前面的字符或子表达式。当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。

                 "非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,

                 在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。

    {n}         正好匹配 n 次。

    {n,}        至少匹配 次。

    {n,m}     匹配至少 n 次,至多 m 次。

    x|y         匹配 x 或 y。

    [xyz]      匹配包含的任一字符。

    [^xyz]    匹配未包含的任何字符。

    [a-z]      匹配指定范围内的任何字符。

    [^a-z]    匹配不在指定的范围内的任何字符。

              匹配一个字边界,即字与空格间的位置。例如,"er"匹配"never"中的"er",但不匹配"verb"中的"er"。

    B          非字边界匹配,"erB"匹配"verb"中的"er",但不匹配"never"中的"er"。

    d          数字字符匹配,等效于 [0-9]。

    D         非数字字符匹配,等效于 [^0-9]。

    f           换页符匹配,等效于 x0c 和 cL。

              换行符匹配,等效于 x0a 和 cJ。

              匹配一个回车符,等效于 x0d 和 cM。

    s         匹配任何空白字符,包括空格、制表符、换页符等,与 [ f v] 等效。

              制表符匹配,与 x09 和 cI 等效。

    v         垂直制表符匹配,与 x0b 和 cK 等效。

    w        匹配任何字类字符,包括下划线,与"[A-Za-z0-9_]"等效。

    W       与任何非单词字符匹配,与"[^A-Za-z0-9_]"等效。

    2、Java中正则表达式主要使用的类为:

    • Pattern 类:

      pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

    • Matcher 类:

      Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

    用法为:

    public boolean matches()      尝试将输入字符串与模式整体匹配,成功返回true,失败返回false。如果部分匹配成功,将移动到下次匹配的位置

    public boolean lookingAt()    尝试将输入字符串开头开始的输入序列与该模式匹配,如果成功,则返回true,并且移动到下次匹配的位置相当于从字符串开始位置第一次执行find()方法,start()方法和end()方法也被赋值了。

    public boolean find()              尝试查找与该模式匹配的输入序列的下一个子序列,如果成功,则返回true,并且移动到下次匹配的位置。

    注意事项:  matches()方法和lookingAt()方法都会从输入字符串开始匹配,并且都会影响find()的匹配结果,而find()方法不会影响matches()和lookingAt()结果。

    实例:

    String str = "acbcacdbc";
            String regex = "a.{1,2}b";
            
            Pattern pattern = Pattern.compile(regex);
            Matcher m = pattern.matcher(str);
            System.out.println("先执行matches()方法,再执行find()方法");
            System.out.println(m.matches());
            while (m.find()) {
                System.out.println(str.substring(m.start(), m.end()));
            }
            
            m.reset();
            System.out.println("先执行find()方法,再执行matches()方法");
            while (m.find()) {
                System.out.println(str.substring(m.start(), m.end()));
            }
            System.out.println(m.matches());
            
            m.reset();
            System.out.println("先执行lookingAt()方法,再执行find()方法");
            System.out.println(m.lookingAt());
            while (m.find()) {
                System.out.println(str.substring(m.start(), m.end()));
            }
            
            m.reset();
            System.out.println("先执行find()方法,再执行lookingAt()方法");
            while (m.find()) {
                System.out.println(str.substring(m.start(), m.end()));
            }
            System.out.println(m.lookingAt());

    输出结果:

    先执行matches()方法,再执行find()方法
    false
    acdb
    先执行find()方法,再执行matches()方法
    acb
    acdb
    false
    先执行lookingAt()方法,再执行find()方法
    true
    acdb
    先执行find()方法,再执行lookingAt()方法
    acb
    acdb
    true
  • 相关阅读:
    2019年6月4号总结
    2019年5月21号总结
    2019年5月8号总结
    2019年5月6号总结
    2019年5月5号总结
    2019年4月18号总结
    java错误笔记之判断字符知否为空出错
    错误笔记:静态方法不能实例化,直接用类名.方法名调用
    Thymeleaf中"th:each""th:if"的用法解析
    @ResponseBody 表示返回的是josn
  • 原文地址:https://www.cnblogs.com/wushengwuxi/p/10021918.html
Copyright © 2020-2023  润新知