正则表达式

本文介绍了Java中正则表达式的基础知识,包括Pattern和Matcher类的使用,以及如何通过matches方法进行字符串匹配。通过示例展示了正则表达式的基本语法,如匹配社会安全号、偶数和电话号码的模式。同时,文章还提到了String类的replaceAll和split方法,用于字符串的替换和拆分操作。

一、简介

正则表达式(regular expression,简写为regex)是一个字符串,用来描述匹配一个字符串集合的模式。 可以使用正则表达式来匹配、替换和拆分字符串。

Java的正则表达式主要由java.util.regex包的以下三个类实现的

Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
 

二、匹配字符串

从String类中的matches方法,初看,与equals方法类似,如以下语句的结果都为true:

"Java".matches("Java");
"Java".equals("Java");

然而,matches方法功能更加强大,它不仅可以匹配一个固定的字符串,还可以匹配符合一个模式的字符串集,如以下语句的结果都为true:

"Java is fun".matches("Java.*")
"Java is cool".matches("Java.*")
"Java is powerful".matches("Java.*")

前面语句中的 "Java.*"是一个正则表达式,它描述了一个字符串模式,以Java开始,后面跟0个或者多个字符串。这里,子字符串  .*  匹配0或者多个任意字符。

三、正则表达式语法

 正则表达式由字面值字符特殊符号组成,下面的表格列出了正则表达式常用的语法  

 

构建正则表达式 

下面是一些示例:

1.社会安全号的模式是 xxx-xx-xxxx,其中x是一位数字,根据题意得知我们规定的模式就是这样,那么它的正则表达式可以描述为 [\\d]{3}-[\\d]{2}-[\\d]{4}  

"111-22-3333".matches("[\\d]{3}-[\\d]{2}-[\\d]{4}")
return true

"11-22-3333".matches("[\\d]{3}-[\\d]{2}-[\\d]{4}")
return false

2.偶数以数字 0、 2、 4、 6 或者 8 结尾,那么偶数的模式可以描述为 [\\d]*[02468] 

"122".matches("[\\d]*[02468]") return true.

"123".matches("[\\d]*[02468]") return false.

3.电话号码的模式是 (xxx)xxx-xxxx,这里x是一位数字,并且第一位数字不能为0,那么电话号码的正则表达式可以描述为 \\([1-9][\\d]{2}\\) [\\d]{3}-[\\d]{4}        

"(912) 921-2343".matches("\\([1-9][\\d]{2}\\) [\\d]{3}-[\\d]{4}") return true.
"(012) 921-2343".matches("\\([1-9][\\d]{2}\\) [\\d]{3}-[\\d]{4}") return false.

四、替换和拆分字符串

如果字符串匹配正则表达式,String类的matches方法返回true,当然了String类也包含repalceAll、replaceFirst和split方法,用于替换和拆分字符串,用法如下图所示:

  replaceAll 方法表示替换所有匹配的子字符串    replaceFirst方法表示替换第一个匹配的子字符串,例如:

System.out.println("Java Java Java".replaceAll("v\\w", "wi"));
//显示 Jawi Jawi Jawi

System.out.println("Java Java Java".replaceFirst("v\\w", "wi"));
//显示 Jawi Java Java

split方法有两个重载方式:             

1.split(regex)方法使用匹配的分隔符将一个字符串拆分为子字符串

2.split(regex,limit)方法中,limit 参数确定模式匹配多少次,如果 limit <= 0,split(regex,limit) 等同于 split(regex),如果 limit > 0,模式最多匹配 limit - 1次

注意:默认情况下,所有量词符都是“贪婪”的,这意味着它们会尽可能匹配多次,比如下面语句会显示 JRvaa,因为第一个匹配成功的是aaa :

System.out.println("Jaaavaa".replaceFirst("a+","R"));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值