Java之Pattern.compile函数用法详解

除了Pattern Pattern.compile(String regex),
Pattern类的compile()方法还有另一个版本:
Pattern Pattern.complie(String regex,int flag),它接受一个标记参数flag,以调整匹配的行为。
flag来自以下Pattern类中的常量:

编译标记 效果
Pattern.CANON_EQ 两个字符当且仅当它们的完全规范分解相匹配时,就认为它们是匹配的,例如,如果我们指定这个标记,表达式a\u030A就会匹配字符串?。在默认的情况下,匹配不考虑规范的等价性
Pattern.CASE_INSENSITIVE(?i) 默认情况下,大小写不敏感的匹配假定只有US-ASCII字符集中的字符才能进行。这个标记允许模式匹配不必考虑大小写(大写或小写)。通过指定UNICODE_CASE标记及结合此标记,基于Unicode的大小写不敏感的匹配就可以开启了,也可以使用嵌入的标记表达式?i开启,下同
Pattern.COMMENTS(?x) 在这种模式下,表达式中的空格(不是指\s,单纯指空格)将被忽略掉,并且以#开始直到行末的注释也会被忽略掉。通过嵌入的标记表达式也可以开启Unix的行模式
Pattern.DOTALL(?s) 在dotall模式中,表达式“.”匹配所有字符,包括行终结符。默认情况下,“.”表达式不匹配行终结符
Pattern.MULTLINE(?m) 在多行模式下,表达式^和$分别匹配一行或输入字符串的开始和结束。默认情况下,这些表达式仅匹配输入的完整字符串的开始和结束
Pattern.UNICODE_CASE(?u) 当指定这个标记,并且开启CASE_INSENSITIVE时,大小写不敏感的匹配将按照与Unicode标准相一致的方式进行。默认情况下,大小写不敏感的匹配假定只能在US-ASCII字符集中的字符才能进行
Pattern.UNIX_LINES(?d) 在这种模式下,在.、^和$行为中,只识别行终结符\n

在这些标记中 Pattern.CASE_INSENSITIVE(?i) ,Pattern.MULTLINE(?m),==Pattern.COMMENTS(?x)==中特别有用。

使用示例如下:
我们可以通过“或”( | )操作组合多个标记的功能

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReFlags {

	public static void main(String[] args) {

		Pattern p=Pattern.compile("^java",Pattern.CASE_INSENSITIVE|Pattern.MULTILINE);
		/*
		 * 使用Pattern.CASE_INSENSITIVE(大小写不敏感的匹配)和Pattern.MULTILINE(多行模式)标记,忽略大小写地匹配所有以java开头的行
		 */

		Matcher m=p.matcher("java has regex\nJava has regex\n"
				+ "JAVA has pretty good regular expression\n"
				+ "Regular expressions are in JavA");
		while (m.find()) {
			System.out.println(m.group());//输出已匹配的部分
		}
	}

}

输出结果:

java
Java
JAVA

使用Pattern.COMMENTS(?x)的例子:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReFlags_Comments {

	public static void main(String[] args) {
		/*
		 * 不使用Pattern.COMMENTS(不启动注释)
		 */
         String s="123";
         Pattern p1=Pattern.compile(" (\\d+)+#test comments");
         Matcher m1=p1.matcher(s);
         System.out.println(m1.matches());//false
         /*
                    * 正则表达式中使用启动注释的标记
          */
         Pattern p2=Pattern.compile("(?x) (\\d+)+#test comments");
         Matcher m2=p2.matcher(s);
         System.out.println(m2.matches());//true
         /*
               * 参数中使用Pattern.COMMENTS以启动注释
          */
         Pattern p3=Pattern.compile("  (\\d+)+#test comments",Pattern.COMMENTS);
         Matcher m3=p3.matcher(s);
         System.out.println(m3.matches());//true
	}

}

运行结果:

false
true
true

到此这篇关于Java之Pattern.compile函数用法详解的文章就介绍到这了,更多相关Java之Pattern.compile函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java正则表达式之Pattern与Matcher类详解

    Pattern.split方法详解 /** * 测试Pattern.split方法 */ @Test public void testPatternSplit() { String str = "{0x40, 0x11, 0x00, 0x00}"; // 分割符为:逗号, {,}, 空白符 String regex = "[,\\{\\}\\s]"; Pattern pattern = Pattern.compile(regex); /* * 1. split 方法

  • Java Pattern和Matcher字符匹配方式

    目录 Pattern类定义 因此,典型的调用顺序是: Pattern类方法详解 Pattern类使用示例: Matcher类定义 Matcher类方法详解 1.Matcher类提供了三个匹配操作方法 2.返回匹配器的显示状态 3.int start(),int end(),int group()均有一个重载方法 4.Matcher类同时提供了四个将匹配子串替换成指定字符串的方法: 5.其他一些方法: 应用实例 Pattern类定义 public final class Pattern exten

  • Swift 中如何使用 Option Pattern 改善可选项的 API 设计

    SwiftUI 中提供了很多"新颖"的 API 设计思路和 Swift 的使用方式,我们可以进行借鉴,并反过来使用到普通的 Swift 代码中.PreferenceKey 的处理方式就是其中之一:它通过 protocol 的方式,为子 view 们提供了一套模式,让它们能将自定义值以类型安全的方式,向上传到父 view 去.如果有机会,我会再专门介绍 PreferenceKey,但这种设计的模式其实和 UI 无关,在一般的 Swift 里,我们也能使用这种方法来改善 API 设计. 在

  • logback 自定义Pattern模板教程

    配色板 "%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray","%boldRed","%boldGreen", "%boldYellow", "%

  • springboot Interceptor拦截器excludePathPatterns忽略失效

    springboot Interceptor拦截器excludePathPatterns忽略失效 excludePathPatterns方法是排除访问路径,但是当你排除的url路径在项目中并不存在的时候,springboot会将路径编程/error,从而无法进行排除. 例如下面代码: registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/login&q

  • Java中Pattern.compile函数的使用详解

    目录 Java Pattern.compile函数的使用 Pattern类的compile()方法还有另一个版本: flag来自以下Pattern类中的常量: 我们可以通过"或"( | )操作组合多个标记的功能 使用Pattern.COMMENTS(?x)的例子: Pattern.compile函数的相关解释 flag的取值范围如下: Java Pattern.compile函数的使用 除了Pattern Pattern.compile(String regex), Pattern类的

  • redis通过lua脚本,获取满足key pattern的所有值方式

    我们知道,redis提供了keys命令去获取所有满足格式的key,如我们键入命令 keys "user*" 将得到所有以user开头的key 然后执行 mget命令可以获取多个key的值,如 但如果满足条件的key过多,我们要将所有key拿到,再用mget去拿到所有值则为相对比较麻烦,因此可以借助xargs redis-cli keys "user*"|xargs redis-cli mget获取到所有key的值 也可以执行lua脚本local keys = red

  • Java如何利用状态模式(state pattern)替代if else

    大多数开发人员现在还在使用if else的过程结构,曾看过jdon的banq大哥写的一篇文章,利用command,aop模式替代if else过程结构.当时还不太明白,这几天看了<重构>第一章的影片租赁案例,感触颇深.下面我来谈一谈为什么要用state pattern替代if else,替代if else有什么好处,以及给出详细代码怎么替代if else.本文参考jdon的"你还在使用if else吗?"及<重构>第一章. 首先我们模仿影片租赁过程,顾客租凭影片

  • Java之Pattern.compile函数用法详解

    除了Pattern Pattern.compile(String regex), Pattern类的compile()方法还有另一个版本: Pattern Pattern.complie(String regex,int flag),它接受一个标记参数flag,以调整匹配的行为. flag来自以下Pattern类中的常量: 编译标记 效果 Pattern.CANON_EQ 两个字符当且仅当它们的完全规范分解相匹配时,就认为它们是匹配的,例如,如果我们指定这个标记,表达式a\u030A就会匹配字符

  • Java构造函数与普通函数用法详解

    函数也被称为方法! 函数的作用及特点: 1.用于定义功能,将功能封装. 2.可以提高代码的复用性. 函数注意事项: 1.不能进行函数套用(不可以在函数内定义函数). 2.函数只有被调用才能被执行. 3.基本数据类型(String.int.-.)修饰的函数类型,要有return返回值. 4.void修饰的函数,函数中的return语句可以省略不写. 5.函数名可以根据需求进行命名. 代码示例:(有无函数/方法的区别) 无函数/方法代码例子: public class NoFunc { public

  • Java正则表达式Pattern和Matcher原理详解

    这篇文章主要介绍了Java正则表达式Pattern和Matcher原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本使用 Scanner中的使用正则表达式 //Scanner 支持的分组 Scanner cin=new Scanner("red a bbc").useDelimiter("\\s*a\\s*"); System.out.println(cin.next()); System.out.pri

  • Java中ByteArrayInputStream和ByteArrayOutputStream用法详解

    目录 ByteArrayInputStream ByteArrayOutputStream ByteArrayInputStream 介绍ByteArrayInputStream 是字节数组输入流.它继承于 InputStream. InputStream 通过read()向外提供接口,供它们来读取字节数据:而 ByteArrayInputStream 的内部额外的定义了一个计数器,它被用来跟踪 read() 方法要读取的下一个字节. 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节.也就是说

  • 浅谈java Iterator.remove()方法的用法(详解)

    实例如下: @Test public void tt(){ List<String> list = new ArrayList<String>(); list.add( "0" ); list.add( "1" ); list.add( "2" ); list.add( "3" ); list.add( "4" ); list.add( "5" ); list.a

  • JavaScript中eval()函数用法详解

    eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执行 Javascript 语句. 语法 复制代码 代码如下: eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. eval()函数用法详解: 此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eva

  • Python的Lambda函数用法详解

    在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数.今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式. 1.为什么要用lambda函数? 先举一个例子:将一个列表里的每个元素都平方. 先用def来定义函数,代码如下 def sq(x): return x*x map(sq,[y for y in range(10)]) 再用lambda函数来编写代码 map(lambda x: x*x,[y for y in r

  • Python中flatten( )函数及函数用法详解

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列表不适用!. a.flatten():a是个数组,a.flatten()就是把a降到一维,默认是按行的方向降 . a.flatten().A:a是个矩阵,降维后还是个矩阵,矩阵.A(等效于矩阵.getA())变成了数组.具体看下面的例子: 1.用于array(数组)对象 >>> from n

  • pytorch中torch.max和Tensor.view函数用法详解

    torch.max() 1. torch.max()简单来说是返回一个tensor中的最大值. 例如: >>> si=torch.randn(4,5) >>> print(si) tensor([[ 1.1659, -1.5195, 0.0455, 1.7610, -0.2064], [-0.3443, 2.0483, 0.6303, 0.9475, 0.4364], [-1.5268, -1.0833, 1.6847, 0.0145, -0.2088], [-0.86

  • python isinstance函数用法详解

    这篇文章主要介绍了python isinstance函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 isinstance() 函数来判断一个对象是否是一个已知的类型类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系. isinstance() 会认为子类是一种父类类型,考虑继承关系. 如果要判断两个类型是否相同推荐使用 isinstance(). 语法

随机推荐