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

Java中的正则匹配

程序员文章站 2022-07-03 21:30:44
正则匹配正则匹配即是在给定字符串中查找符合正则表达式的字符。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则匹配常用类正则匹配中常用的类为Pattern和Matcher类,前者表示匹配的模式串,后者表示匹配的结果。常用的使用方法如下:// 待查找字符String fileName = "workspace/test.apk";// 构建模式,其中compile方法还可以...

正则匹配

正则匹配即是在给定字符串中查找符合正则表达式的字符。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑

正则匹配常用类

正则匹配中常用的类为Pattern和Matcher类,前者表示匹配的模式串,后者表示匹配的结果。
常用的使用方法如下:

// 待查找字符
String fileName = "workspace/test.apk";
// 构建模式,其中compile方法还可以传入第二个参数,表示匹配方法,常用的有怱略大小写、匹配多行等。
Pattern pattern = Pattern.compile("^workspace/(.+)\\.apk$");
Matcher matcher = pattern.matcher(fileName);

可以使用matcher中的find()以及find(int index)方法来确定是否存在目标字符串。
find()如果查询到了会返回true,并且移动到匹配字符串的末尾,准备下一次的匹配。
find(int index)方法中传入的index是指定查询的起始范围,即从index处开始查找。

常用元字符

用的不多的情况下,经常忘。麻烦,还是记录一下吧。
Java中的正则匹配
Java中的正则匹配
Java中的正则匹配
Java中的正则匹配
图从https://www.runoob.com/regexp/regexp-metachar.html拷贝,方便查阅。

常用场景

如在android中需要将一段字符中符合某些规则的字符加深加粗等显示,则可以使用如下代码实现。

Pattern p = Pattern.compile(targetStr);
Matcher ma = p.matcher(sourceStr);
// 找出所有的目标字符
while (ma.find()) {
	// 匹配到的字符
    String group = ma.group();
    // 匹配到的起点,可以用来确定匹配的字符串所在位置
    int start = ma.start();
    // 也可以使用ma.end()方法代替
    int end = start + group.length();
    // 设置字符串样式
    spannable.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}

常见问题

在一次调试中,当断点停在find()方法时,返回了false。
Java中的正则匹配
但是通过intelliJ工具的检测及代码测试可以匹配,但是find()却返回了false。
主要原因就是上面说的,如果find()匹配成功后会跳到匹配字符的末尾准备下一次的匹配。而这个false是下一次匹配时返回的。
因为方法执行了一次后,断点查看相当于又执行了一次,故返回了false。
在断点调试时,一定要注意这种结果可能会改变的情形。

本文地址:https://blog.csdn.net/honeysx/article/details/107555173

相关标签: Android