正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理文本。
正则表达式并不仅限于某一种语言,但是在某种语言中有细微的差别。
Java正则表达式和Perl的最为相似的。
java.util.regex包主要包括以下三个类:
Pattern类:
pattern对象是一个正则表达式的编译表示。 Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
Matcher类:
Matcher对象是对输入字符串进行解释和匹配操作的引擎。 与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。
PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
public class RegexMatches{
private static final String REGEX = "\\bcat\\b";
private static final String INPUT = "cat cat cat cattie cat";
public static void main(String args[]){
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(INPUT);//获取matcher对象
int count = 0;
while(m.find()){
count++;
System.out.println("Match number "+ count);
System.out.println("start(): "+ m.start());
System.out.println("end(): "+ m.end());
}
}
}
结果:
Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22
可以看到这个例子是使用单词边界,以确保字母 “c” “a” “t” 并非仅是一个较长的词的子串。它也提供了一些关于输入字符串中匹配发生位置的有用信息。
Start方法返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引,end方法最后一个匹配字符的索引加1。
matches 和lookingAt 方法
matches 和lookingAt 方法都用来尝试匹配一个输入序列模式。它们的不同是matcher要求整个序列都匹配,而lookingAt 不要求。
这两个方法经常在输入字符串的开始使用。
public class RegexMaches{
private static final String REGEX = "FOO";
private static final String INPUT = "FOOOO";
private static Pattern pattern;
private static Matcher matcher;
public static void main(String args[]){
pattern = pattern.compile(REGEX);
matcher = pattern.matcher(INPUT);
System.out.println("Current REGEX is: "+ REGEX);
System.out.println("Current INPUT is: "+ INPUT);
System.out.println("lookingAt(): "+ matcher.lookingAt());
System.out.println("matches(): "+ matcher.matches());
}
}
结果:
Current REGEX is: FOO
Current INPUT is: FOOOO
lookingAt(): true
matches(): false