首页 > 其他分享 >第十六章《正则表达式》第3节:Pattern类

第十六章《正则表达式》第3节:Pattern类

时间:2023-01-02 21:34:38浏览次数:55  
标签:p2 第十六章 正则表达式 Pattern System 字符串 out

​程序员不只能用字符串来表示一个正则表达式,实际上,Java语言定义了一个专门用来表示正则表达式的类,它的名称是Pattern,因此,一个Pattern类的对象当中就封装了一个经过编译的正则表达式。需要注意:这个类位于java.util. regex包下,因此在使用时需要用import关键字进行引入。

Pattern类定义了一个构造方法,但是这个构造方法是私有的,所以在程序当中不能通过new关键字来创建它的对象。程序员都是通过它的compile()静态方法来创建对象的。在调用compile方法时需要把一个字符串形的正则表达式当作参数传递到这个方法当中,例如:​

Pattern p = Pattern.compile("\\d[abc]");​

如果某个Pattern类的对象并不是通过compile()静态方法创建出来的,而是从其他方法中返回到程序当中的,程序员可以通过pattern()方法来获得对象中包含的那个正则表达式,所获得的这个正则表达式是以字符串的形式返回的。​

使用Pattern类的对象也可以去某个字符串当中去搜索符合特定格式的目标字符串。找到目标字符串之后,程序员用Pattern类对象不能完成替换操作,这是因为Pattern类没有提供完成替换的方法。如果需要把搜索到目标字符串替换成其他内容,需要使用Matcher类,关于Matcher类的使用将会在16.4小节中讲解。但是Pattern类提供了一个split()方法能够把一个字符串用正则表达式所匹配的字符串进行分割。​

Pattern类还提供了一个matches()静态方法,这个方法能够检验一个正则表达式与一个字符串是否能够完成匹配。此外,Pattern类的quote()方法能够把一个字符串形式的正则表达式加入到“特殊字符失效区”当中,最终形成一个新的字符串并返回。​

实际上,16.2.5小节所介绍的匹配模式标识符在Pattern也用静态属性的形式进行了定义,每一个静态属性对应的匹配模式标识符如表16-5所示。​

表16-5 Pattern中的匹配模式标识符​

静态属性​

匹配模式标识符及意义​

CASE_INSENSITIVE ​

(?i)匹配过程中忽略大小写​

UNICODE_CASE​

(?u)忽略大小写的范围扩大到整个Unicode字符集,需先设置CASE_INSENSITIVE标志​

MULTILINE​

(?m)匹配过程中把换行符(\n)也看成是一行的结尾​

DOTALL​

(?s)允许. 匹配换行符​

COMMENTS​

(?x)忽略正则表达式中的的空白字符​

这些静态属性可以在调用compile()静态方法时当作第二个参数传入方法中。下面的【例16_15】展示了Pattern类的使用方法。​

【例16_15 Pattern类的使用】

Exam16_15.java​

import java.util.regex.*;
public class Exam16_15 {
public static void main(String[] args) {
String reg = "\\d[abc]";//定义一个字符串形式的正则表达式
String str = "xyz1Auvw2brst3copq";
Pattern p1 = Pattern.compile(reg);
Pattern p2 = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);//设置忽略大小写
System.out.println("p1对应的正则表达式:"+p1.pattern());
System.out.println("p2对应的正则表达式:"+p2.pattern());
String[] strings1 = p1.split(str);//以p1为分割符分割str
System.out.print("以p1为分割符分割str:");
for(String s:strings1){
System.out.print(s+" ");
}
String[] strings2 = p2.split(str);//以p2为分割符分割str
System.out.println();//换行
System.out.print("以p2为分割符分割str:");
for(String s:strings2){
System.out.print(s+" ");
}
System.out.println();//换行
System.out.print("3a是否能匹配\\d[abc]:");
System.out.println(Pattern.matches("\\d[abc]","3a"));
System.out.print("把整个正则表达式置于特殊字符失效区内:");
System.out.print(Pattern.quote(reg));
}
}

【例16_15】定义了两个Pattern对象p1和p2,但p2它们设置的匹配模式为不区分大小写。【例16_15】的运行结果如图16-15所示。​

第十六章《正则表达式》第3节:Pattern类_Java

图16-15【例16_15】运行结果​

从图16-15可以看出:虽然p2与p1的设置了不同的匹配模式,但它们对应的字符串形式的正则表达式却是相同的,这是因为Pattern类并不是把匹配模式当作正则表达式正文的一部分,而是把它当作了对象的一个属性。使用p1和p2分割字符串时有不同的效果,可以看出:str中的“1A”对于不能匹配p1,但由于p2设置了不区分大小写的匹配模式,“1A”能够与p2完成匹配。​

本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。

标签:p2,第十六章,正则表达式,Pattern,System,字符串,out
From: https://blog.51cto.com/mugexuetang/5984144

相关文章

  • 第十六章《正则表达式》第4节:Matcher类
    ​16.3小节所介绍的Pattern类代表了正则表达式,它的功能不是很强,如果程序员想用正则表达式完成替换等更复杂的操作,必须使Matcher类。Matcher类也位于java.util.regex包下,使用......
  • 解放生产力!一文教你快速入门正则表达式
    一、概述正则表达式一般用于文本内容的查找和替换,在日常工作中还可用来校验用户的输入是否符合自定义的规则。正则表达式是匹配模式,要么匹配字符,要么匹配位置。正则表达......
  • 快来领取你的JavaScript正则表达式速查表
    如果我们想对字符串进行相关(增、删、改、查、检索)操作,就可以用接下来的正则表达式实现 什么是正则表达式正则表达式是用于匹配字符串中字符组合的模式正则表达式通......
  • 正则表达式基础语法
     1、预定义的字符类(默认匹配一个字符)元字符解释.任何字符\d一个数字:[0-9]\D非数字:[^0-9]\s一个空白字符:[\t\n\x0B\f\r]\S非空白字符:[^\s]\w......
  • Linux&shell通过正则表达式查找文件练习
    linux&shell编程中通过正则表达式来匹配查找文件极大的提高查找效率。首先,解释一下下边出现的命令。linux部分:ls:查看文件夹内的命令。|:管道。grep:搜索后边匹配的字符......
  • java用正则表达式脱敏手机号
    一种正则形式:在Java开发中有时候需要对敏感字段数据脱敏,废话不多说,直接上代码。       /**        *脱敏手机号        *        *@......
  • Js利用正则表达式去除字符串的中括号
    原文链接:点我  //功能:1)去除字符串前后所有空格   //     2)去除字符串中所有空格(包括中间空格,需要设置第2个参数为:g)   functionTrim(str,is_g......
  • 如何在表格中写正则表达式来提取电话号码?
    正则表达式,是描述匹配模式(pattern)的文本字符串,用于搜索和匹配字符串集。简单来说,就是可以通过从一堆字符串里,搜索提取自己想要的内容。Excel网络函数库帮助使用者们在Ex......
  • 正则表达式 元字符列表
    正则表达式\w\s\d\b.匹配除换行符以外的任意字符 \w匹配字母或数字或下划线或汉字等价于'[A-Za-z0-9_]'。 \s匹配任意的空白符 \d匹配数字 \b匹配单词的开......
  • 微信小程序中data里的正则表达式丢失问题
    最近在开发微信小程序的时候在data里面定义了正则表达式,结果在读取的时候发现正则表达式丢了。只返回了一个空的对象Page({data:{reg:/^1\d{10}$/g},onLo......