当前位置: 移动技术网 > IT编程>开发语言>Java > Java中的正则匹配

Java中的正则匹配

2020年07月27日  | 移动技术网IT编程  | 我要评论

正则匹配

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

正则匹配常用类

正则匹配中常用的类为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处开始查找。

常用元字符

用的不多的情况下,经常忘。麻烦,还是记录一下吧。
元字符
元字符2
元字符3
元字符4
图从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。
调试时返回了false
但是通过intelliJ工具的检测及代码测试可以匹配,但是find()却返回了false。
主要原因就是上面说的,如果find()匹配成功后会跳到匹配字符的末尾准备下一次的匹配。而这个false是下一次匹配时返回的。
因为方法执行了一次后,断点查看相当于又执行了一次,故返回了false。
在断点调试时,一定要注意这种结果可能会改变的情形。

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网