Java正则表达式(1)

正则表达式定义了字符串的模板 可以对字符串(或文本,大量的字符串构成了文本)进行查找 提取 分割 替换等操作

什么是模板?可以是简单字符 固定的字符串 或包含了特殊字符的组合 

有了模板 就可以用这个规则去匹配字符串了 匹配到了就可以进行相应的操作

简单的例子:

查找name字符串中是否包含了tony

String name = "tonytonytonytony";

这个例子中模板就是字符串"tony"

匹配的字符串就是name

那操作是什么? 如果匹配到了你可以进行替换了

但是name中有4个tony 你是匹配到一个就替换了 还是全部替换

这个可以在后续操作中进行指定

所以 学习正则表达式就是学习如何去指定这个模板规则

Java对于正则表达式的支持表现在java.util.regex下的MatchResult接口和几个类

Matcher Pattern PatternSyntaxException中


模板中支持的合法字符及含义(部分)




    


详细介绍 可以查阅API文档





一旦创建好了模板 就可以使用Java提供的类来使用正则表达式了

package com.tony;

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

public class RegexDemo {

	public static void main(String[] args) {
		// 匹配的目标
		String name = "tonytonytonytony";
		// Pattern对象是正则表达式编译后在内存中的表示形式
		// 为什么要编译到内存中 ? 便于多次使用 提升执行性能
		// 相当于创建了模板 这个模板可以被重复使用
		Pattern pattern = Pattern.compile("tony");
		// matcher方法执行匹配 返回Matcher匹配器
		Matcher matcher = pattern.matcher(name);
		// 完全匹配
		System.out.println("完全匹配:" + matcher.matches()); // false 
		int count=0;
		// find()无参方法 默认从0开始匹配
		while(matcher.find()) {
			count++;
			System.out.println("开始索引:" + matcher.start());
			System.out.println("结束索引:" + matcher.end());
		}
		System.out.println("tony出现的次数:" + count);
		System.out.println("==================");
		
		System.out.println(matcher.find(3));
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		System.out.println(matcher.find());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		
	}

}

输出结果:

完全匹配:false
开始索引:0
结束索引:4
开始索引:4
结束索引:8
开始索引:8
结束索引:12
开始索引:12
结束索引:16
tony出现的次数:4
==================
true
4
8
true
8
12



find():无参方法 匹配到内容 下次匹配从下一个子字符串开始

find(1):有参方法 指定开始匹配的索引 一次匹配成功 又开始从原字符串的索引位开始匹配 (不是相对于子字符串的索引位置匹配 所以死循环)


package com.tony;

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

public class RegexDemo {

	public static void main(String[] args) {
		// 匹配的目标
		String name = "tonytonytonytony";
		// Pattern对象是正则表达式编译后在内存中的表示形式
		// 为什么要编译到内存中 ? 便于多次使用 提升执行性能
		// 相当于创建了模板 这个模板可以被重复使用
		Pattern pattern = Pattern.compile("tony");
		// matcher方法执行匹配 返回Matcher匹配器
		Matcher matcher = pattern.matcher(name);
		
		// lookingAt()的理解
		System.out.println(matcher.lookingAt());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		System.out.println(matcher.find());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		System.out.println(matcher.lookingAt());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		// lookingAt:部分匹配 总是从第一个字符进行匹配 匹配成功了不再继续匹配
		// 匹配失败了也不继续匹配
		
		System.out.println("=================");
		// reset()的理解
		System.out.println(matcher.find());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		System.out.println(matcher.find());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		System.out.println("===reset===");
		Matcher return_matcher = matcher.reset();
		System.out.println(matcher == return_matcher); // true
		System.out.println(matcher.find());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		
		// reset() 无参的方法 重置配置的位置(从0开始 指针移动到最开始出)
		// 返回Matcher对象
		
		// reset(有参的理解)
		System.out.println("===reset(params)===");
		System.out.println(matcher.find());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		matcher.reset("文心tony");
		System.out.println(matcher.find());
		System.out.println(matcher.start());
		System.out.println(matcher.end());
		// 重置匹配的位置 重置匹配的目标
		
		
		// group() 不分组的情况下(什么是分组 在2中研究)  
		// 返回由以前匹配操作所匹配的输入子序列(模板)
		System.out.println(matcher.group());
	}

}
true
0
4
true
4
8
true
0
4
=================
true
4
8
true
8
12
===reset===
true
true
0
4
===reset(params)===
true
4
8
true
2
6
tony




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值