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

正则表达式介绍

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

字符处理

特殊字符处理

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

预定义字符

预定义字符即为正则表达式中的“通配符”,就是可以匹配多个字符的特殊字符。

预定义字符

作用

.

匹配任意字符

\d

digit,代表数字,匹配0-9中的所有数字

\D

匹配非数字

\s

space,代表空白,匹配所有空白字符(空格、换行、回车、换页、制表符等)

\S

匹配所有非空白字符

\w

word,代表单词,匹配所有单词字符,包含0-9所有数字、26个英文字母以及下划线"_"

\W

匹配所有非单词字符

三种模式的数量表示符

贪婪模式:Greedy,数量表示符默认为贪婪模式,会一直匹配下去,直到无法匹配为止。

勉强模式:Reluctant,用问号?后缀表示,只会匹配最少的字符,也被称为最小匹配模式。

占有模式: 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类中的查找、替换、分割、提取等操作方法

boolean matches(String regex):判断该字符串是否匹配指定的正则表达式;

String replaceFirst(String regex, String replaceStr):将该字符串中第一个匹配regex的子串替换成replaceStr;

String replaceAll(String regex, String replaceStr):将该字符串中所有匹配regex的子串替换成replaceStr;

String[] split(String regex):以regex作为分隔符对字符串进行分割;

Matcher类常用方法

find():返回目标字符串中是否包含与Pattern匹配的子串,若传入int类型的参数,则从该int索引处向下搜索;

group():返回上一次与Pattern匹配的子串;

start():用于确定子串在目标字符串中的位置;返回上一次与Pattern匹配的子串在目标字符串中的开始位置;

end():用于确定子串在目标字符串中的位置;返回上一次与Pattern匹配的子串在目标字符串中的结束位置加1;

matches():判断整个目标字符串与Pattern是否匹配,要求整个字符串都和Pattern完全匹配时才会返回true;

lookingAt:返回目标字符串前缀与Pattern是否匹配,只需要字符串以Pattern开头就返回true;

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);

封装正则表达式工具类

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class PatternUtil {

public static Matcher getMatcher(String regex, String source) {

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(source);

return matcher;

}

public static void main(String[] args) {

String regix = "(\\D*)(\\d+)(.*)(\\d)";

String str = "this is test 1000 $, please check! 12";

Matcher matcher = getMatcher(regix, str);

if (matcher.find()) {

System.out.println("matcher group():" + matcher.group());

System.out.println("matcher group(0): " + matcher.group(0));

System.out.println("matcher group(1):" + matcher.group(1));

System.out.println("matcher group(2):" + matcher.group(2));

System.out.println("matcher group(3):" + matcher.group(3));

System.out.println("matcher group(4):" + matcher.group(4));

} else {

System.out.println("no match");

}

}

}

运行结果

matcher group():this is test 1000 $, please check! 12

matcher group(0): this is test 1000 $, please check! 12

matcher group(1):this is test

matcher group(2):1000

matcher group(3): $, please check! 1

matcher group(4):2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值