Matcher 类的方法
1、索引方法:提供了有用的索引值,精确标明输入字符串中在哪能找到匹配。
1)、public int start()
返回以前匹配的初始索引
2)、public int start(int group)
返回在以前的匹配操作期间,由给定组所不活的子序列的初始索引
3)、public int end()
返回最后匹配字符之后的偏移量
4)、public int end(int group)
返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量
例:
Pattern pattern = Pattern.compile("Java");
String test = "123Java456";
Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.println(matcher.start());//返回3
System.out.println(matcher.end());//返回7
System.out.println(matcher.group());//返回Java
2、研究方法:用来检查输入字符串并返回一个布尔值,表示是否找到该模式。
1)、public boolean lookingAt()
尝试将从区域开头开始的输入序列与该模式匹配
2)、public boolean find()
尝试查询与该模式匹配的输入序列的下一个子序列
3)、public boolean find(int start)
重置此匹配器,然后尝试查找匹配该模式,从指定索引开始的输入序列的下一个子序列
4)、public boolean matches()
尝试将整个区域与模式匹配
例:
public static void test2(){
Pattern pattern = Pattern.compile("Java");
String test1 = "Java";
String test2 = "Java1234";
String test3 = "1234Java";
/*
* matches()是全部匹配,是将整个输入串与模式匹配,
* 如果要验证一个输入的数据是否为数字类型或其他类型,一般要用matches()
*/
Matcher matcher = pattern.matcher(test1);
System.out.println(matcher.matches());//返回true
matcher = pattern.matcher(test2);
System.out.println(matcher.matches());//返回false
/*
*lookingAt 方法不需要整句都匹配,但是需要从第一个字符开始匹配
*/
matcher = pattern.matcher(test2);
System.out.println(matcher.lookingAt());//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.lookingAt());//返回false
/*
* find()方法是部分匹配,是查找输入串中与模式匹配的子串,
* 如果该匹配的串有组还可以使用group()函数
*/
matcher = pattern.matcher(test1);
System.out.println(matcher.find());//返回true
matcher = pattern.matcher(test2);
System.out.println(matcher.find());//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.find(2));//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.find(5));//返回false
}
3、替换方法:替换输入字符串李文本的方法
1)、public Matcher appendReplacement(StringBuffer sb, String replacement)
实现非终端添加和替换步骤
2)、public StringBuffer appendTail(StringBuffer sb)
实现终端添加和替换步骤
3)、public String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每子序列
4)、public String replaceFirst(String replacement)
替换模式与给定替换字符串相匹配的输入序列的第一个子序列
5)、public static String quoteReplacement(String s)
返回指定字符串的字面替换字符串。这个方法返回一个字符串,就像传递给Matcher类的appendReplacement方法一个字面字符串一样工作。
例:
private static String REGEX = "dog";
private static String INPUT = "The dog says meow. " +
"All dogs say meow.";
private static String REPLACE = "cat";
public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
/*
* replaceFirst 和 replaceAll 方法用来替换匹配正则表达式的文本。
* 不同的是,replaceFirst 替换首次匹配,replaceAll 替换所有匹配
*/
Matcher m = p.matcher(INPUT);
INPUT = m.replaceAll(REPLACE);
System.out.println(INPUT);
}
结果:The cat says meow. All cats say meow.
例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches
{
private static String REGEX = "a*b";
private static String INPUT = "aabfooaabfooabfoob";
private static String REPLACE = "-";
public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
// 获取 matcher 对象
Matcher m = p.matcher(INPUT);
StringBuffer sb = new StringBuffer();
while(m.find()){
m.appendReplacement(sb,REPLACE);
}
m.appendTail(sb);
System.out.println(sb.toString());
}
}
结果:-foo-foo-foo-
4、PatternSyntaxException 类的方法:是一个非强制异常类,它指示一个正则表达式模式中的语法错误。
1)、public String getDescription()
获取错误的描述
2)、public int getIndex()
获取错误的索引
3)、public String getPattern()
获取错误的正则表达式模式
4)、public String getMessage()
返回多行字符串,包含语法错误及其索引的描述、错误的正则表达式模式和模式中错误索引的可视化指示。