java-正则表达式


一、什么是正则表达式

正则表达式(Regular Expression),简称为Regex或RegExp,是一种用于匹配、查找和替换文本的强大工具。它是由一系列字符和特殊字符组成的模式,用于描述字符串的特定格式或模式。在生活中我们经常会进行一些操作,如判断字符串是否是有效的电话号码,邮箱地址是否正确,字符串是否符合格式要求。

如以下代码:

//判断号码的格式是否正确
    public boolean isValidMobileNumber(String str){
        if (str.length() !=11 ){
            return false;
        }
        for (int i=0; i<str.length();i++ ){
            char a = str.charAt(i);
            if (a<'0' || a>'9'){
                return false;
            }
        }
        return true;
    }
 //示例 判断用户输入的是否是20xx年
    //规则 2 0 \d \d
    //java字符串 “20\\d\\d”
    //java代码 : boolean  is20xx  = input.matches(“20\\d\\d”)
    public boolean isyear(String y){
        if (y == null){
            return false;
        }
        return y.matches("20\\d\\d");
    }

使用正则表达式有哪些好处:

  1. 强大的模式匹配:正则表达式提供了一种强大的方式来描述和匹配字符串的模式。它可以识别复杂的模式,例如特定的字符序列、数字模式、日期格式等,从而有助于对字符串进行有效的匹配和处理。

  2. 灵活的搜索和替换:正则表达式可以在文本中快速搜索和定位特定模式的内容。这使得在文本编辑器、编程语言中进行批量替换、搜索功能等操作变得更加灵活和高效。

  3. 数据验证和过滤:正则表达式可以用于验证用户输入的数据是否符合特定的模式或条件。例如,检查电子邮件地址、电话号码、密码强度等,可以通过正则表达式进行高效的验证。它还可以用于过滤和清理数据,从而确保数据的一致性和正确性。

  4. 代码简化和效率提升:正则表达式提供了一种紧凑的语法和功能,可以在很少的代码量下完成复杂的匹配和操作。这样可以提高代码的可读性、可维护性,并且减少编写大量逻辑代码的需求,从而提升开发效率。

  5. 平台和多语言支持:正则表达式几乎在所有主流编程语言中得到了广泛支持,因此可以在不同的平台和语言环境中共享和重用正则表达式的逻辑和代码。

总体而言,正则表达式是一种强大的工具,可以在文本处理、数据验证和过滤、模式匹配等场景中提高效率和灵活性。然而,需要注意的是正则表达式本身的学习曲线较陡峭,编写复杂的正则表达式可能需要一些技巧和经验。


二、正则表达式的一些匹配规则

1一些基本的匹配规则

正则表达式规则可以匹配
A指定字符A
\u548c指定Unicode字符
.任意字符a,b,&,0
\d0~90,1,2,…9
\w空格、Tab键" "
\D非数字a,A,&,-,
\W非\w&,@,中,
\S非\sa,A,&,-,
AB*任意个数字符A,AB,ABB,ABBB
AB+至少1个字符AB,ABB,ABBB
AB?0个或1个字符A,AB
AB{3}指定个数字符ABBB
AB{1,3}指定范围个数字符AB,ABB,ABBB
AB{2,}至少n个字符ABB,ABBB,…
AB{0,3}最多n个字符A,AB,ABB,ABBB

2复杂一些的匹配规则

正则表达式规则可以匹配
^开头字符串开头
$结尾字符串结束
[ABC][…]内任意字符A,B,C
[A-F0-9xy]指定范围的字符A,…,F,O,…,9,x,y
[^A-F]指定范围外的任意字符非A,…,F
AB|CDAB或CDAB,CD
AB|CD|EFGAB或CD或EFGAB,CD,EFG

三 分组匹配规则

括号可以用来进行分组匹配 (…): “(\d{4})\-(d{1,2})\-(d{1,2})”
“2016-12-12” --> “2016” “12” “12”
举例 :提取电话号码 ###-########
正则表达式:^ (\d{3,4} \ - \ d{6,8} ) $
代码:String regex = “^\\ d{3,4} \\ - \\ d{6,8}$”

 //1 分组匹配规则
        //反复使用一个正则表达式字符串进行快速匹配效率比较第可以吧正则表达式字符串编译为Pattern对象
        Pattern pattern = Pattern.compile("^\\d{3,4}\\-\\d{6,8}$");

        pattern.matcher("010-12345678").matches();  //true
        Matcher matcher = pattern.matcher("010-12345678");
        //0 表示匹配整个字符串,n表示第n个子串
        matcher.group(0);

四 非贪婪匹配

非贪婪匹配(也称为惰性匹配或最小匹配)是正则表达式中一种匹配模式的方式。默认情况下,正则表达式是贪婪匹配的,即尽可能多地匹配字符。而非贪婪匹配则相反,它尽可能少地匹配字符。非贪婪匹配通常使用 ? 修饰符来实现。在正则表达式中,当使用 *、+、? 或 {} 等限定符时,它们将默认为贪婪匹配,即匹配尽可能多的字符。但是,当在贪婪的限定符后面添加 ? 时,它们变为非贪婪匹配,即匹配尽可能少的字符。

示例:

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        // 待搜索的字符串
        String text = "abcabcabc";

        // 使用非贪婪匹配的正则表达式进行搜索
        String pattern = "a.*?b";
        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(text);

        if (matcher.find()) {
            System.out.println("Match: " + matcher.group());
        }
    }
}
//输出
Match: ab

五 搜索与替换

在正则表达式中,搜索和替换是常见的操作之一,用于在文本中查找匹配某个模式的字符串,并且可以将这些匹配的字符串替换为指定的内容。
示例代码:

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        // 待搜索和替换的字符串
        String text = "Hello, world! Welcome to the world of programming!";

        // 使用正则表达式进行搜索
        String pattern = "world";
        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(text);

        while (matcher.find()) {
            System.out.println("Match: " + matcher.group());
        }

        // 使用正则表达式进行替换
        String replacement = "code";
        String newText = text.replaceAll(pattern, replacement);
        System.out.println("New Text: " + newText);
    }
}

总结

1 正则表达式是一个字符串
2 正则表达式用字符串描述一个匹配规则
3 使用正则表达式可以快速判断给定的字符串是否符合匹配规则
4 Java内建正则表达式引擎 java.util.regex

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值