• 正则表达式之Pattern.MULTILINE Pattern.DOTALL


    参考地址:https://www.cjavapy.com/article/68/

    java 中正则表达式匹配多行Pattern.MULTILINE   和Pattern.DOTALL模式

    本文介绍java中正则表达式怎么样匹配换行符 从而实现多行匹配,

    1. Pattern.MULTILINE模式的用法

      正则表达式中出现^ $在默认的情况下只会匹配第一行,设置了MULTILINE模式回匹配所有行。

    Pattern p1 = Pattern.compile("^.*b.*$");
    //输出false,因为正则表达式中出现了^或$,默认只会匹配第一行,第二行的b匹配不到。
    System.out.println(p1.matcher("a
    b").find());
    Pattern p2 = Pattern.compile("^.*b.*$",Pattern.MULTILINE);
    //输出true,指定了Pattern.MULTILINE模式,就可以匹配多行了。
    System.out.println(p2.matcher("a
    b").find());

    2.Pattern.DOTAL模式的用法

    在默认的情况下(.)不会匹配换行符,设置了Pattern.DOTALL模式,才会匹配所有字符包括换行符

    Pattern p1 = Pattern.compile("a.*b");
    //输出false,默认点(.)没有匹配换行符
    System.out.println(p1.matcher("a
    b").find());
    Pattern p2 = Pattern.compile("a.*b", Pattern.DOTALL);
    //输出true,指定Pattern.DOTALL模式,可以匹配换行符。
    System.out.println(p2.matcher("a
    b").find());

    3. 同时使用Pattern.MULTILINE和Pattern.DOTALL

    实际的情况中要比较复杂。

    Pattern p1 = Pattern.compile("^a.*b$");
    //输出false
    System.out.println(p1.matcher("cc
    a
    b").find());
    Pattern p2 = Pattern.compile("^a.*b$", Pattern.DOTALL);
    //输出false,因为有^或&没有匹配到下一行
    System.out.println(p2.matcher("cc
    a
    b").find());
    Pattern p3 = Pattern.compile("^a.*b$", Pattern.MULTILINE);
    //输出false,匹配到下一行,但.没有匹配换行符
    System.out.println(p3.matcher("cc
    a
    b").find());
    //指定多个模式,中间用|隔开
    Pattern p4 = Pattern.compile("^a.*b$", Pattern.DOTALL|Pattern.MULTILINE);
    //输出true
    System.out.println(p4.matcher("cc
    a
    b").find());
  • 相关阅读:
    Python3 字典Dict(十三)
    Python3 元组Tuple(十二)
    Python3 列表List(十一)
    Python3 循环语句(十)
    Python3 条件控制(九)
    Python3 运算符(八)
    Swift3.0语法2
    Swift反射机制实现 AppDelegate 字符串获取类并成为根控制器
    Swift语法(更新)
    单例
  • 原文地址:https://www.cnblogs.com/dousil/p/12855468.html
Copyright © 2020-2023  润新知