正则表达式

一、简介

正则表达式(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"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值