Java进阶之正则表达式

简介: Java进阶之正则表达式

Java进阶之正则表达式
今天来看一下正则表达式,什么是正则表达式呢?
正则表达式(Regular Expression,简称RegEx)是一种用于匹配字符串中字符组合的模式。可以帮助我们对文本字符串进行搜索、替换、分割和校验等操作。
正则表达式并不是Java所独有的特性,而是一种强大且灵活的工具,任何语言都可以结合它来实现功能。最早是由Perl语言中发展来的。
为什么是对字符串来进行操作呢?因为String是一种很强大的类型,支持任何类型的转换,用字符串都可以表示这些类型。
正则表达式由普通字符(例如字母和数字)以及特殊字符(称为元字符)组成,这些元字符具有特殊的含义,用于指定模式匹配的规则。
普通字符就不说了,元字符有以下分类:
元字符
.:匹配除换行符之外的任意单个字符。
[]:匹配方括号内的任意一个字符(字符类)。
[^]:匹配不在方括号内的任意一个字符(否定字符类)。
\d:匹配一个数字字符,等价于 [0-9]。
\D:匹配一个非数字字符,等价于 [^0-9]。
\w:匹配一个单词字符(字母、数字或下划线),等价于 [A-Za-z0-9]。
\W:匹配一个非单词字符,等价于 [^A-Za-z0-9
]。
\s:匹配任何空白字符(空格、制表符、换行符等)。
\S:匹配任何非空白字符。
限定符
*:匹配前面的子表达式零次或多次。
+:匹配前面的子表达式一次或多次。
?:匹配前面的子表达式零次或一次。
{n}:匹配前面的子表达式恰好n次。
{n,}:匹配前面的子表达式至少n次。
{n,m}:匹配前面的子表达式至少n次,但不超过m次。
定位符
^:匹配输入字符串的开始位置。
$:匹配输入字符串的结束位置。
分组和引用
(exp):匹配exp并捕获文本到自动命名的组里。
(?:exp):匹配exp但不捕获匹配的文本。
\n:引用编号为n的捕获组匹配的文本。
选择符
|:匹配两个或多个分支选择的任意一个。

  Java中提供了java.util.regex包下的类来支持正则表达式的使用。主要类和方法:
  Pattern类:它是正则表达式编译后的表示形式。通过调用Pattern.compile(String regex)方法,可以将正则表达式编译成Pattern对象。
  Matcher类:它用于对输入字符串进行正则表达式的匹配操作。可以通过Pattern对象的matcher(CharSequence input)方法获得Matcher对象。
  PatternSyntaxException:当正则表达式语法不正确时,会抛出这个异常。
  示例:
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;

  public class RegexExample {
      public static void main(String[] args) {
          // 编译正则表达式
          Pattern pattern = Pattern.compile("\\d+");
          // 要匹配的字符串
          String text = "电话号码是1316651,不是55125。";
          // 创建matcher对象
          Matcher matcher = pattern.matcher(text);
          // 查找匹配的字符串
          while (matcher.find()) {
              System.out.println("找到的电话号码: " + matcher.group());
          }
      }
  }
  通过上面可以看到\\d代表数字,+代表一次或者多次
  简单匹配了一下,并且输出了匹配到的字符。
  我们也可以进行校验,比如校验手机号邮箱的格式:
  // 手机号的正则表达式,这里假设手机号是11位数字,且以1开头
  Pattern pattern = Pattern.compile("^1[3-9]\\d{9}$");
  Matcher matcher = pattern.matcher("13800008888");
  System.out.println("验证结果: " + matcher.matches());
  Pattern和Matcher类中提供了很多的API来支持正则表达式。
  这里就不深究了,需要的时候直接让AI帮你写一个就行了。

  值得一提的是Java的String类提供的API很好的支持了正则表达式:
  public boolean matches(String regex):这个方法用于检查字符串是否与给定的正则表达式匹配。如果匹配,返回true;否则返回false。
  public String[] split(String regex):这个方法根据匹配给定的正则表达式来拆分字符串,并返回一个字符串数组。
  public String replaceAll(String regex, String replacement):这个方法将字符串中所有匹配给定的正则表达式的子串替换为指定的字符串。
  public String replaceFirst(String regex, String replacement):这个方法将字符串中第一个匹配给定的正则表达式的子串替换为指定的字符串。
  public String[] split(String regex, int limit):这个方法与split(String regex)类似,但增加了limit参数来限制拆分后的子字符串数组的长度。
  示例:
  public class RegexStringMethodsExample {
      public static void main(String[] args) {
          String text = "Hello 123 World 456!";
          // 使用 matches 方法检查字符串是否匹配正则表达式
          boolean isMatch = text.matches(".*\\d+.*");
          System.out.println("Matches digits: " + isMatch);
          // 使用 split 方法根据正则表达式拆分字符串
          String[] splitText = text.split("\\s+");
          for (String str : splitText) {
              System.out.println(str);
          }
          // 使用 replaceAll 方法替换所有匹配的子串
          String replacedText = text.replaceAll("\\d+", "numbers");
          System.out.println("Text after replacing numbers: " + replacedText);
          // 使用 replaceFirst 方法替换第一个匹配的子串
          String firstReplacedText = text.replaceFirst("\\d+", "number");
          System.out.println("Text after replacing first number: " + firstReplacedText);
          // 使用 split 方法并限制结果数组的长度
          String[] limitedSplitText = text.split("\\s+", 3);
          for (String str : limitedSplitText) {
              System.out.println(str);
          }
      }
  }
  正则表达式,可以极大地简化文本处理任务,提高开发效率。
  END
目录
相关文章
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
587 212
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
233 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
826 60
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1175 157
|
6天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
496 109