欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java—正则表达式(Pattern类和Matcher类)

程序员文章站 2024-01-17 12:12:16
本文主要介绍Java—正则表达式(Pattern类和Matcher类)的使用。 ......

正则表达式介绍

  正则表达式可以用于对字符串的处理,相当于是一个匹配字符串的模板。主要包含查找、替换、分割、提取等操作;java中通过patternmatcher类提供对正则的支持。

字符处理

特殊字符处理

对于特殊字符:$^()[]{}*+?.\|前面都要加上\进行转义。

预定义字符

预定义字符即为正则表达式中的“通配符”,就是可以匹配多个字符的特殊字符。
|预定义字符|作用|
|-|-|
|.|匹配任意字符|
|\d|digit,代表数字,匹配0-9中的所有数字|
|\d|匹配非数字|
|\s|space,代表空白,匹配所有空白字符(空格、换行、回车、换页、制表符等)|
|\s|匹配所有非空白字符|
|\w|word,代表单词,匹配所有单词字符,包含0-9所有数字、26个英文字母以及下划线"_"|
|\w|匹配所有非单词字符|

三种模式的数量表示符

  1. 贪婪模式:greedy,数量表示符默认为贪婪模式,会一直匹配下去,直到无法匹配为止。
  2. 勉强模式:reluctant,用问号?后缀表示,只会匹配最少的字符,也被称为最小匹配模式。
  3. 占有模式: possessive, 用加号+后缀表示。
贪婪模式 勉强模式 占用模式 作用
x? x?? x?? x表达式出现0次或1次
x* x*? x*? x表达式出现0次或多次
x+ x+? x+? x表达式出现1次或多次
x{n} x{n}? x{n}? x表达式出现n次
x{n,} x{n,}? x{n,}? x表达式最少出现n次
x{n,m} x{n,m}? x{n,m}? x表达式最少出现n次,最多出现m次

方括号表达式

方括号表达式含义 作用
枚举 [abcd],表示a、b、c、d中的任意一个字符;
范围:- [a-e],表示从a到e字母中的任意字母;可结合枚举进行使用,[a-eu-z],表示从a到e,从u到z范围内的任意字符
否定:^ [^abcd],表示不是a、b、c、d中的字符;[^a~e]表示不是a至f范围的字符
与运算:&& [a-g&&[bch],求a~z和bch的交集,则结果为bc
并运算 [a-e[h-j]]

正则表达式的使用

string类常用方法

string类中的查找、替换、分割、提取等操作方法

  1. boolean matches(string regex):判断该字符串是否匹配指定的正则表达式;
  2. string replacefirst(string regex, string replacestr):将该字符串中第一个匹配regex的子串替换成replacestr;
  3. string replaceall(string regex, string replacestr):将该字符串中所有匹配regex的子串替换成replacestr;
  4. string[] split(string regex):以regex作为分隔符对字符串进行分割;

matcher类常用方法

  1. find():返回目标字符串中是否包含与pattern匹配的子串,若传入int类型的参数,则从该int索引处向下搜索;
  2. group():返回上一次与pattern匹配的子串;
  3. start():用于确定子串在目标字符串中的位置;返回上一次与pattern匹配的子串在目标字符串中的开始位置;
  4. end():用于确定子串在目标字符串中的位置;返回上一次与pattern匹配的子串在目标字符串中的结束位置加1;
  5. matches():判断整个目标字符串与pattern是否匹配,要求整个字符串都和pattern完全匹配时才会返回true;
  6. lookingat:返回目标字符串前缀与pattern是否匹配,只需要字符串以pattern开头就返回true;
  7. reset():将现有的matcher对象应用于一个新的字符序列;

pattern对象用法

  pattern是不可变类,是正则表达式编译后在内存中的表示形式,在java中使用正则表达式字符串必须要先被编译为patter对象,然后再使用pattern对象创建对应的matcher对象。
用法

// 编译正则表达式为pattern对象
pattern pattern = pattern.compile("bc*d");
// 使用编译好的pattern对象创建matcher对象
matcher m = p.matcher("bccccd");
boolean b = m.matches();
system.out.println(b);

结果

true

上述步骤等价于

boolean b = pattern.matches("bc*d", "bccccd");
system.out.println(b);