正则表达式在Java中的语法
Java正则表达式的语法和一般的正则表达式语法差不多,但有一点需要注意,就是 \
的用法,简单来说就是 \
的数量要多一倍。
\\d
表示一个数字
\\\\
表示一个被转义的普通 \
Pattern
和 Macher
的使用
判断是否匹配
String content = "I am studying Regex";
String regex = ".*studying.*";
boolean isMatch = Pattern.matches(regex, content);
//or
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
boolean isMatch = matcher.find();
获取匹配值 和 匹配结果的各项数据
find()
//每调用一次find()方法,matcher会去寻找与表达式匹配的下一个子序列
if(matcher.find()) {
System.out.println(matcher.group()); //匹配结果
}
start() 和 end()
if(matcher.find()) {
System.out.println(matcher.start()); //此次匹配的子序列的开始索引,包含次此批匹配子序列 [
System.out.println(matcher.end()); //此次匹配的子序列的结束索引,不包此次含匹配子序列 )
}
appendReplacement(StringBuffer sb, String replacement) 和 appendTail(StringBuffer sb)
//用于替换原内容中的匹配值
StringBuilder sb = new StringBuilder();
while(matcher.find()) {
matcher.appendReplacement(sb, replacement);
//相当于
//sb.append(上次匹配的end()到这次匹配的start()之间的内容,即[last.end(), now.start)
//再加上 sb.append(matcher.group() => replacement) 此次匹配被替换的值
}
matcher.appendTail(sb);
//相当于sb.append(最后一次匹配的end()到内容结束之间的内容,即[last.end(), content.length() -1)
//如此可以完成对内容中所有的匹配子序列进行替换
//如果将while换成if,则是对第一次匹配子序列进行替换
-
replaceFirst() 和 replaceAll()
也是匹配替换的方法,分别是替换第一次匹配结果 和 替换所有匹配结果
-
group()
String regx = "(a)(b(c))(d)";
matcher.find();
matcher.group(); //返回此次匹配表达式的匹配结果
//带参数的group(int g) 会对有分组的表达式,即有(),如果第g个分组不存在会报错,如果第g个分组没有匹配到匹配结果会报错,当然需要整个表达式有匹配结果才能有分组的匹配结果,否则会报错
//group(g) 获取各个分组的匹配结果 g从1开始
//group(0) 返回的是整个表达式的匹配结果