20、正则表达式

正则表达式

符合一定规则的字符串

字符

例如:x a 9
\n:换行
\r:回车
":双引号
\:反斜杠(四个是\\)
在这里插入图片描述

字符类

[abc]:a或b或c
[^abc]:除了a或b或c的任意字符
[a-zA-Z]:a到z或者A-Z(两头字母包括)
[0-9]:0到9的字符的其中一个

预定义字符类

.:任何字符 转义字符:.
\d:数字: [0-9]
\w:单词字符 [a-zA-Z_0-9]

边界匹配器

^:行的开头
$:行的结尾
\b:某个单词的边界
string world?hello:空格和?是单词边界

数量词

?:0次或1次
*:0次或N次
+:1次或N次
{n}:匹配n次
{n,}:至少匹配n次
{n,m}:至少匹配n次,至多m次
例如:
邮箱:^\w+@\w{2,6}(\.\w{2,3})+$

Pattern

正则表达式的编译表示形式

方法

public static Pattern compile(String regex)
将给定的正则表达式编译到模式中
参数:regex - 要编译的表达式
抛出:PatternSyntaxException - 如果表达式的语法无效

public Matcher matcher(CharSequence input)
创建匹配给定输入与此模式的匹配器
参数:input - 要匹配的字符序列
返回:此模式的新匹配器

public boolean matches()
尝试将整个区域与模式匹配
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息
返回:当且仅当整个区域序列匹配此匹配器的模式时才返回 true
例如:

//定义Pattern对象
Pattern pattern = Pattern.compile("A*B");
Matcher matcher = pattern.matcher("AAAAAAAAAAAAAB");
System.out.println(matcher.matches());

public boolean find()查找想要匹配的子字符串
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息
返回: 当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true

public int start()返回以前匹配的初始索引
指定者:接口 MatchResult 中的 start
返回:第一个匹配字符的索引

public String group()返回想要匹配的子字符串
对于具有输入序列 s 的匹配器 m,表达式 m.group() 和 s.substring(m.start(), m.end()) 是等效的
注意,某些模式(例如,a*)匹配空字符串。当模式成功匹配输入中的空字符串时,此方法将返回空字符串
指定者:接口 MatchResult 中的 group
返回:以前匹配操作所匹配的字符串形式的子序列(可能为空)
例如:

String string="My name is Daivd,what's your name?";
String regex="\\b\\w{4}\\b";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(string);

while(matcher.find()){
	System.out.println(matcher.start());
	System.out.println(matcher.end());
	System.out.println(matcher.group());
	System.out.println("--------------------");
}

public boolean lookingAt()从字符串的开始位置开始匹配
例如:

String string="My name is David, what's your name?";
String regex="\\b\\w{4}\\b";
		
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(string);
		
System.out.println(matcher.lookingAt());

while (matcher.find()) {
	System.out.println(matcher.start());
	System.out.println(matcher.end());
	System.out.println(matcher.group());
	System.out.println("-------------------------");
}

String的matches方法和Pattern和Matcher的区别

两者各有优缺点
string的matches方法:
string.matches(string2);
此方法适合一次匹配,生命周期短,matches是将整个字符串进行匹配
Pattern和Matcher:
适合多次匹配,生命周期长,matches是将整个字符串进行匹配
可以许多匹配者共享一个模式,而且匹配能力强力
例如:

// 定义Pattern对象
Pattern pattern = Pattern.compile("A*B");

Matcher matcher = pattern.matcher("AAAAAAAAAAAAAB");
Matcher matcher1 = pattern.matcher("AAAAAB");
Matcher matcher2= pattern.matcher("AAAdddAAB");

System.out.println(matcher.matches());

System.out.println("================================");

String string = "AAAAAAAAAAAAAB";
String string2 = "A*B";
// matches方法的参数要确定是正则表达式
// boolean b = string2.matches(string);
boolean b = string.matches(string2);
System.out.println(b);

//两者各有优缺点:
/*string.matches(string2); 
 * 此方法适合一次匹配,生命周期短,matches是将整个字符串进行匹配
 * */
		
/*Pattern和Matcher:
 * 适合多次匹配,生命周期长,matches是将整个字符串进行匹配
 * 可以许多匹配者共享一个模式,而且匹配能力强力
 * */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值