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());
  • 相关阅读:
    基于FPGA的ARP协议实现
    Modelsim 仿真错误集锦
    基于FPGA的IIC驱动设计
    状态机跑飞的解决办法
    基于FPGA的检测时钟脉冲的高电平及低电平的中点标志位设计
    基于FPGA的UART实现
    基于FPGA的数字秒表设计
    Matlab的常用调试方法
    基于FPGA的花样流水灯
    **time_limited.sof文件
  • 原文地址:https://www.cnblogs.com/dousil/p/12855468.html
Copyright © 2011-2022 走看看