Java正则表达式-模式匹配器
1 模式匹配器简介
java.util.regex包里面包含三个类,以支持正则表达式的完整版本。
- Pattern
- Matcher
- PatternSyntaxException
Pattern:保存正则表达式的编译形式。
Matcher:将要与模式匹配的字符串关联起来,并执行实际匹配。
PatternSyntaxException:代表格式错误的正则表达式中的错误。
2 编译正则表达式
Pattern类没有公开的构造方法,意味不能直接构造并使用。
Pattern类包含一个静态compile()方法,该方法返回一个Pattern对象。
compile()方法存在两个重载的方法。
static Pattern compile(String regex)
static Pattern compile(String regex, int flags)
以下是Pattern类的代码示例:
import java.util.regex.Pattern;
//一点教程网
public class Main {
public static void main(String[] args) {
// Prepare a regular expression
String regex = "[a-z]@.";
// Compile the regular expression into a Pattern object
Pattern p = Pattern.compile(regex);
}
}
上面Pattern类的第二个重载方法中有个flags整数值,该值为标记值,用于修改Pattern的匹配模式,下面是flags可以设置的一些常量:
Flags值 | 说明 |
---|---|
Pattern.CANON_EQ | 启用规范对等。 |
Pattern.CASE_INSENSITIVE | 启用不区分大小写的匹配。 |
Pattern.COMMENTS | 允许空格和模式注释。 忽略空格和以#开头直到行尾的嵌入注释。 |
Pattern.DOTALL | 启用dotall模式。 默认情况下,.不匹配行终止符。设置此标志时,.匹配行终止符。 |
Pattern.LITERAL | 启用模式的文字分析。该标志使元字符和转义序列成为普通字符。 |
Pattern.MULTILINE | 启用多行模式。默认情况下,^与$匹配的开始和输入序列的末端。此标志使模式仅逐行或输入序列的末尾匹配。 |
Pattern.UNICODE_CASE | 启用支持Unicode的大小写。与CASE_INSENSITIVE标志一起,可以根据Unicode标准执行不区分大小写的匹配。 |
Pattern.UNICODE_ CHARACTER_CLASS | 启用预定义字符类和POSIX字符类的Unicode版本。设置此标志时,预定义字符类和POSIX字符类符合Unicode技术标准。 |
Pattern.UNIX_LINES | 启用Unix行模式。设置此标志后,仅将\n字符识别为行终止符。 |
3 Pattern的案例
3.1 案例1
以下为编译设置CASE_INSENSTIVE和DOTALL的Flags标记的代码示例:
import java.util.regex.Pattern;
//www.yidian.com 一点教程网
public class Main {
public static void main(String[] args) {
String regex = "[a-z]@.";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
}
}
3.2 案例2
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//www.yiidian.com 一点教程网
public class Main {
public static void main(String args[]) {
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
String candidateString = "Java. java JAVA jAVA";
Matcher matcher = p.matcher(candidateString);
// display the latter match
System.out.println(candidateString);
matcher.find(11);
System.out.println(matcher.group());
// display the earlier match
System.out.println(candidateString);
matcher.find(0);
System.out.println(matcher.group());
}
}
以上代码执行结果为:
Java. java JAVA jAVA
JAVA
Java. java JAVA jAVA
Java
热门文章
优秀文章