zoukankan      html  css  js  c++  java
  • 正则表达式之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());
  • 相关阅读:
    Eclipse的下载与安装
    IntelliJ IDEA(2018)安装详解
    关于Idea中的web.xml 自动生成模板问题
    基于ssm框架的web.xml配置及解析
    Mybatis分页插件PageHelper的配置与基本使用
    基于maven的ssm框架pom.xml的基本配置及解析
    python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
    快速指数算法
    伪随机序列
    django中Queryset的删除问题、分页问题
  • 原文地址:https://www.cnblogs.com/dousil/p/12855468.html
Copyright © 2011-2022 走看看