正则表达式的理论基础

发布于 2024-01-14 11:52:21 字数 3264 浏览 26 评论 0

普通字符的表示

我们说正则表达式主要由普通字符和元字符组成,那么我们首先先看看普通字符该如何表示。大部分普通字符由字符本身即可表示,例如: single 等。除此之外,也有一些特殊的表示方式。

  • /0 开头,后面紧跟 1-3 位数字,表示的是一个八进制数。这个数的十进制值对应于 ASCII 编码中的相应字符。
  • /x 或者 /X 开头,后面紧跟两位字符,表示的是一个十六进制的数。该数的十进制的值对应于 ASCII 编码中相应的字符。
  • /u 开头,后面紧跟四位字符,表示一个 Unicode 编号。该编号对应于 Unicode 字符集中的一个具体字符。

元字符

元字符是在正则表达式中有特殊意义的字符

常用的元字符:

在某种特殊情况下,需要将这些元字符当做普通字符使用,我们使用 \ + 元字符,表示转移该元字符,此后该元字符将表示一个普通字符。例如: \\\\\^ ,它们分别表示的是 \\^ ,不再具有特殊含义了。下面我们开始逐渐介绍正则表达式语法中的元字符的特殊含义。

​但是需要注意的是:Java 中的 String 中"\"本来就是转义的意思,如果我们需要匹配"\"就需要写成“\\\\”.

String str = "a\\b";
String regex = "\\\\";
str = str.replaceAll(regex, "x");
System.out.println(str);//输出:axb

字符组匹配单个字符

​我们用一对中括号 ([.....]) 表示字符组,整个字符组中会有多个字符位列其中,该字符组表示的含义是:匹配任意一个字符,该字符是位列字符组中的。

​例如: [single] 匹配的是字符 single 中的任意一个字符。以上我们简单介绍了字符组的基本概念以及它所能匹配的内容,其实有时候为了表述连续的字符,我们会结合元字符 - 一起来操作字符组。例如: [0123456789] ,匹配的是 0 到 9 之间的任意一个数字,对于这种情况我们可以选择这样来简化操作: [0-9]

其实两者表述的含义是一样的,为了简化起见,如果遇到连续的字符表述,可以选择使用元字符来简化。同样的还有 [a-z] ,它匹配任意一个小写字母。对于元字符 - 还需要说明一点的是:该字符只有出现在两个字符之间才具有特殊含义,单独出现在字符组的所有字符之前或者之后只能表述普通字符 - 。下面介绍有关字符组的一些其他相关的元字符。

元字符 ^ 在 字符组 中表示排除的意思只有放在所有字符的最前面才具有特殊含义,否则只能表示普通字符。例如: [^1234] ,该字符组匹配一个字符,但是不是 1 或 2 或 3 或 4。当然, [c^yy] ,匹配的是四个普通字符: c^yy 。此外,需要注意一点的是,除了以上介绍的几种元字符必须置放于指定位置上才能起作用以外,其余所有元字符在字符组中统统被视作普通字符,不再具有特殊含义

量词

量词: *+?{min,max}

它们主要用于指定量词前面的字符在匹配时可以多次出现。

例如:

  • se*cyy :其中 e 出现 0-无穷次
  • se{0,10}cyy :其中 e 可以出现 0-10 次
  • se{9}cyy :其中 e 必须出现 9 次
  • se{3,} :其中 e 出现 3-正无穷次

分组

在介绍分组之前,无论是使用量词还是字符组都是针对的一个字符。而分组针对的就是一串字符,我们也可以对分组使用量词,控制该分组出现的次数。 我们使用 () 括号表示分组,例如:

  • sing(le)+cccc :在该正则表达式中,分组 le 可以出现一次或者多次
  • sing(le)*cccc :在该正则表达式中,分组 le 可以出现零次或者多次

还可以在 分组 中使用 | 表示或:

String str = "aaabbb";
String regex = "^(aaa|bbb)+"; // 表示 aaa 或 bbb 在目标字符串开头至少出现一次
System.out.println(str.matches(regex)); // 返回 true 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

甜是你

暂无简介

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文