本网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于本网站 |
RSS 源和博客 |
问号使正则表达式中的前一个标记可选。 colou?r 匹配 colour 和 color。问号称为量词。
你可以通过使用括号将多个标记分组在一起,并将问号放在闭合括号之后,使它们可选。例如:Nov(ember)? 匹配 Nov 和 November。
您可以通过包含多个问号来编写一个匹配许多备选方案的正则表达式。 Feb(ruary)? 23(rd)? 匹配 February 23rd、February 23、Feb 23rd 和 Feb 23。
您还可以使用大括号使某些内容变为可选。 colou{0,1}r 与 colou?r 相同。 POSIX BRE 和 GNU BRE 都不支持这两种语法。这些风格需要反斜杠来赋予大括号它们的特殊含义:colou\{0,1\}r。
问号是本教程介绍的第一个贪婪元字符。问号为正则表达式引擎提供了两个选择:尝试匹配问号所应用的部分,或不尝试匹配它。引擎总是尝试匹配该部分。只有当这导致整个正则表达式失败时,引擎才会尝试忽略问号所应用的部分。
效果是,如果您将正则表达式 Feb 23(rd)? 应用于字符串 Today is Feb 23rd, 2003,则匹配项始终为 Feb 23rd,而不是 Feb 23。您可以在第一个问号后加上第二个问号,从而使问号变为懒惰(即关闭贪婪)。
有关其他 重复 运算符的讨论提供了有关贪婪和懒惰量词的更多详细信息。
让我们将正则表达式 colou?r 应用于字符串 The colonel likes the color green。
正则表达式中的第一个标记是 文本 c。它成功匹配到的第一个位置是 colonel 中的 c。引擎继续,发现 o 匹配 o,l 匹配 l,另一个 o 匹配 o。然后,引擎检查 u 是否匹配 n。这失败了。但是,问号告诉正则表达式引擎,不匹配 u 是可以接受的。因此,引擎跳到下一个正则表达式标记:r。但这也不匹配 n。现在,引擎只能得出结论,整个正则表达式无法从 colonel 中的 c 开始匹配。因此,引擎重新开始尝试将 c 匹配到 colonel 中的第一个 o。
经过一系列失败后,c 匹配 color 中的 c,o、l 和 o 匹配后面的字符。现在,引擎检查 u 是否匹配 r。这失败了。再说一遍:没问题。问号允许引擎继续使用 r。这匹配 r,引擎报告正则表达式成功匹配了我们字符串中的 color。
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |
| 简介 | 目录 | 特殊字符 | 不可打印字符 | 正则表达式引擎内部 | 字符类 | 字符类减法 | 字符类交集 | 简写字符类 | 点 | 锚点 | 单词边界 | 交替 | 可选项目 | 重复 | 分组和捕获 | 反向引用 | 反向引用,第 2 部分 | 命名组 | 相对反向引用 | 分支重置组 | 自由间距和注释 | Unicode | 模式修饰符 | 原子分组 | 所有格量词 | 前瞻和后顾 | 前瞻和后顾,第 2 部分 | 将文本保留在匹配之外 | 条件 | 平衡组 | 递归 | 子例程 | 无限递归 | 递归和量词 | 递归和捕获 | 递归和反向引用 | 递归和回溯 | POSIX 方括号表达式 | 零长度匹配 | 继续匹配 |
页面网址:https://regexper.cn/optional.html
页面上次更新时间:2019 年 11 月 22 日
网站上次更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。