Java中的正则匹配

正则匹配

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

正则匹配常用类

正则匹配中常用的类为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。
在断点调试时,一定要注意这种结果可能会改变的情形。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值