正则表达式三个常用类
正则表达式三个常用类
java.util.regex 包主要包括以下三个类,Pattern类、Matcher类和PatternSyntaxException
(1)Pattern类
Pattern对象是一个正则表达式对象。Pattern类没有公共构造方法。要创建一个Pattern对象,调用其公共静态方法,它返回一个Pattern对象。该方法接收一个正则表达式作为它的第一个参数。例如:Pattern r = Pattern.compile(pattern);
Pattern (Java Platform SE 6)
正则表达式的编译表示形式。
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher
对象,依照正则表达式,该对象可以与任意字符序列
匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
(2)Matcher类
Matcher对象是对输入字符串进行解释和匹配的引擎。与Pattern类一样,Matcher也没有公共构造方法。需要调用Pattern对象的matcher方法来获得一个Matcher对象。
Matcher (Java Platform SE 6)
通过解释 Pattern
对 character sequence
执行匹配操作的引擎。
通过调用模式的 matcher
方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:
matches
方法尝试将整个输入序列与该模式匹配。lookingAt
尝试将输入序列从头开始与该模式匹配。find
方法扫描输入序列以查找与该模式匹配的下一个子序列。
每个方法都返回一个表示成功或失败的布尔值。通过查询匹配器的状态可以获取关于成功匹配的更多信息。
(3)PatternSyntaxException
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
演示matches方法
//matches 方法,用于整体匹配, 在验证输入的字符串是否满足条件使用
import java.util.regex.Pattern;
public class PatternMethod {
public static void main(String[] args) {
String content = "hello abc hello, 周小末";
//String regStr = "hello";
String regStr = "hello.*";
boolean matches = Pattern.matches(regStr, content);
System.out.println("整体匹配= " + matches);
}
}
Matcher类的常用方法
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatcherMethod {
public static void main(String[] args) {
String content = "hello edu jack zxmtom hello smith hello zxm zxm";
String regStr = "hello";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
System.out.println("=================");
System.out.println(matcher.start());
System.out.println(matcher.end());
System.out.println("找到: " + content.substring(matcher.start(), matcher.end()));
}
//整体匹配方法,常用于,去校验某个字符串是否满足某个规则
System.out.println("整体匹配=" + matcher.matches());
//完成如果 content 有 zxm 替换成 周小末
regStr = "zxm";
pattern = Pattern.compile(regStr);
matcher = pattern.matcher(content);
//注意:返回的字符串才是替换后的字符串 原来的 content 不变化
String newContent = matcher.replaceAll("周小末");
System.out.println("newContent=" + newContent);
System.out.println("content=" + content);
}
}
- 点赞
- 收藏
- 关注作者
评论(0)