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