JAVA正则表达式的模式匹配_Java正则表达式-模式匹配器

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值