正则表达式/语法
外观
正则表达式有几种变体。这些变体不仅在具体语法上有所不同,而且在功能上也有所不同。支持正则表达式的各个工具也有其自身的特点。
- 简单正则表达式 - 广泛用于向后兼容,但在 POSIX 兼容系统上已弃用。
- 基本正则表达式 - 由一些 Unix shell 工具使用
- Perl 兼容正则表达式 - 由 Perl 和一些应用程序使用
- POSIX 基本正则表达式 - 为实用程序之间的一致性提供扩展。这些扩展不受某些传统 Unix 工具实现的支持。
- POSIX 扩展正则表达式 - 可通过 -E 命令行开关由一些 Unix 实用程序支持
- 非 POSIX 基本正则表达式 - 提供 POSIX 不支持的附加字符类
- Emacs 正则表达式 - 由 Emacs 编辑器使用
- Shell 正则表达式 - 用于模式匹配和文件名替换的有限形式的正则表达式
诸如 * 和 + 之类的量词尽可能多地匹配:它们是贪婪的。对于某些用途,它们的贪婪程度并不合适。例如,假设你想在以下文本中找到第一个用引号括起来的字符串
- 这些词包括“cat”、“mat”和“pat”。
模式 ".*"
匹配下面文本的斜体部分,即 "cat","mat",和 "pat" 而不是所需的 "cat"
- 这些词包括 "cat","mat",和 "pat"。
为了解决这个问题,某些版本的正则表达式提供了非贪婪运算符,例如 *?、+? 和 }?。在 PHP 中,在正则表达式末尾添加“U”会使量词非贪婪,如 /".*"/U
。在不支持上述两种选项的版本中,你可以指定 不 要匹配的内容,如 ("[^"]*")
来解决讨论的示例。但是,在处理带括号的表达式时,(\[\[[^\]]*\]\])
无法匹配 A B C [[D E] F G]]。
一个比较表或矩阵,显示了哪些功能或版本的正则表达式在哪些工具或编程语言中可用,可以从 regular-expressions.info 获得。