正则表达式

一、定义

        正则表达式(regular expression)是一个字符串,用来描述匹配一个字符串集合的模式。可以使用正则表达式匹配、替换和拆分字符串。 Linux 工具可以用它来过滤文本。 Linux工具(比如 sed 编辑器或 gawk 程序)能够在处理数据时使用正则表达式对数据进行模式匹配。如果数据匹配模式,它就会被接受并进一步处理;如果数据不匹配模式,它就会被滤掉。

二、 匹配字符串

        string类中的matches方法不仅可以匹配固定字符串,还可以匹配符合一个模式的字符串集。例如,以下语句结果都为true。     

String s = new String(“java is fun”);
System.out.println(s.matches("java.*");

前面“Java.*”是一个正则表达式。描述了一个字符串模式,以Java开始,后面跟着0个或多个字符串。

三、正则表达式语法

正则表达式由字面值字符和特殊符号组成,下表是常用的语法。

(注意:反斜杠字符是特殊字符,在字符串中开始转义序列。故表格中 ” \\ " 是表示 “ \ " )

        1.示例1

        社会安全号模式xxx-xx-xxxx,其中x是数字,根据上表可以描述为[\\d]{3}-[\\d]{2}-[\\d]{4}。

public static void main(String[] args){
    String s = new String("111-22-3333");
    String regex = "[\\d]{3}-[\\d]{2}-[\\d]{4}";
    System.out.println(s.matches(regex));
}

        2.示例2

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

public static void main(String[] args){
    String s = new String("122");
    String regex = "[\\d]*[02468]";
    System.out.println(s.matches(regex));
}

        3.示例3

        电话号码模式是(xxx)xxx-xxxx,x为一位数字,并且第一位数字不能为零。电话号码的正则表达式可以描述为

                \\([1-9][\\d]{2}\\) [\\d]{3}-[\\d]{4}

public static void main(String[] args){
    String s = new String("(912)921-2728");
    String regex = "\\([1-9][\\d]{2}\\) [\\d]{3}-[\\d]{4}";
    System.out.println(s.matches(regex));
}

四、懒惰匹配和贪婪匹配

 贪婪匹配:正则表达式中包含重复的限定符时,通常的行为是匹配尽可能多的字符。

  懒惰匹配:在特殊情况下需要匹配尽可能少的字符。

例如: a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。但是我们此时可能需要匹配的是ab这样的话就需要用到懒惰匹配了。懒惰匹配会匹配尽可能少的字符

常用的懒惰匹配限定符如下:

代码/语法说明
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

五、替换和拆分字符串

1.替换字符

        String类包含replaceAll、replaceFirst和·split方法,用于替换和拆分字符串。

        replaceAll方法替换所有匹配的子字符串。

        例如:        

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

        replaceFirst方法替换第一个匹配的子字符串

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

    2.拆分字符

        Srting类有split方法,分别按照参数字符串分割,存储在ss[]中,用于分割的字符串舍弃

             代码示例:(此处演示 如何按照 - 或者 ~ 或者 数字 来分割字符串)

String str = new String("jike~hello-world234java");  

 String[] split = str.split("-|~|\\d+");  

        for(String s : split) {  

            System.out.println(s);  

        }  

运行结果

jike  

hello  

world  

java

若有不足,欢迎指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值