正则表达式工具 |
grep |
PowerGREP |
RegexBuddy |
RegexMagic |
通用应用程序 |
EditPad Lite |
EditPad Pro |
语言和库 |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML Schema |
Xojo |
XQuery 和 XPath |
XRegExp |
数据库 |
MySQL |
Oracle |
PostgreSQL |
本网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于本网站 |
RSS Feed 和博客 |
POSIX 或“uniX 便携式操作系统接口”是一系列标准,它们定义了(UNIX)操作系统应支持的部分功能。其中一个标准定义了两种正则表达式风格。涉及正则表达式的命令,如 grep 和 egrep,在 POSIX 兼容的 UNIX 系统上实现了这些风格。一些 数据库系统 也使用 POSIX 正则表达式。
基本正则表达式或 BRE 风格标准化了一种类似于传统 UNIX grep 命令使用的风格。这几乎是最古老的正则表达式风格,至今仍在使用。使这种风格与众不同的一点是,大多数元字符需要反斜杠才能赋予元字符其风格。包括 POSIX ERE 在内的其他大多数风格使用反斜杠来抑制元字符的含义。使用反斜杠来转义永远不是元字符的字符是一个错误。
BRE 支持 POSIX 方括号表达式,它类似于其他正则表达式风格中的字符类,具有一些特殊功能。不支持简写。使用通常的元字符的其他功能有 点 匹配除换行符之外的任何字符,插入符号和美元 匹配字符串的开头和结尾,以及 星号 重复标记零次或多次。要逐字匹配这些字符中的任何一个,请使用反斜杠对其进行转义。
其他 BRE 元字符需要使用反斜杠才能赋予其特殊含义。原因是 UNIX grep 的最旧版本不支持这些元字符。grep 的开发者希望使其与现有的正则表达式保持兼容,这些表达式可能将这些字符用作文本字符。BRE a{1,2} 按字面意思匹配 a{1,2},而 a\{1,2\} 匹配 a 或 aa。一些实现支持 \? 和 \+ 作为 \{0,1\} 和 \{1,\} 的替代语法,但 \? 和 \+ 不是 POSIX 标准的一部分。可以使用 \( 和 \) 对标记进行分组。反向引用通常为 \1 到 \9。仅允许最多 9 个组。例如,\(ab\)\1 匹配 abab,而 (ab)\1 无效,因为没有与反向引用 \1 对应的捕获组。使用 \\1 按字面意思匹配 \1。
POSIX BRE 不支持任何其他功能。甚至 交替 也不支持。
扩展正则表达式或 ERE 风格标准化了一种类似于 UNIX egrep 命令使用的风格。“扩展”相对于原始 UNIX grep,它仅具有方括号表达式、点、插入符号、美元符号和星号。ERE 支持这些内容,就像 BRE 一样。大多数现代 regex 风格都是 ERE 风格的扩展。按照今天的标准,POSIX ERE 风格相当简单。POSIX 标准定义于 1986 年,自那时以来,正则表达式已经取得了长足的发展。
egrep 的开发者没有尝试与 grep 保持兼容,而是创建了一个单独的工具。因此,egrep 和 POSIX ERE 添加了其他元字符,而无需反斜杠。你可以使用反斜杠来抑制所有元字符的含义,就像在现代 regex 风格中一样。转义一个不是元字符的字符是一个错误。
量词 ?、+、{n}、{n,m} 和 {n,} 分别重复前一个标记零次或一次、一次或多次、n 次、n 到 m 次以及 n 次或更多次。交替通过通常的竖线 | 支持。未加修饰的括号创建一个组,例如 (abc){2} 匹配 abcabc。POSIX 标准未定义反向引用。一些实现确实支持 \1 到 \9,但这些不是 ERE 标准的一部分。ERE 是旧 UNIX grep 的扩展,而不是 POSIX BRE 的扩展。
而这正是扩展的全部内容。
在关于交替的教程主题中,我解释了正则表达式引擎在找到匹配的备选方案后将停止。然而,POSIX 标准要求返回最长匹配。当将 Set|SetValue 应用于 SetValue 时,符合 POSIX 的正则表达式引擎将完全匹配 SetValue。即使引擎是正则表达式定向 NFA 引擎,POSIX 也要求它通过尝试所有备选方案并返回最长匹配(在本例中为 SetValue)来模拟DFA 文本定向匹配。传统的 NFA 引擎将匹配 Set,就像本网站上讨论的所有其他正则表达式风格一样。
符合 POSIX 的引擎仍将找到最左匹配。如果您将 Set|SetValue 应用于 Set or SetValue 一次,它将匹配 Set。字符串中的第一个位置是我们正则表达式可以找到有效匹配的最左位置。在字符串中可以找到更长的匹配这一事实无关紧要。如果您第二次应用正则表达式,从字符串中的第一个空格继续,那么将匹配 SetValue。传统的 NFA 引擎将匹配字符串开头的 Set 作为第一个匹配,并将匹配字符串中第 3 个单词开头的 Set 作为第二个匹配。
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |
| grep | PowerGREP | RegexBuddy | RegexMagic |
| EditPad Lite | EditPad Pro |
| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML 模式 | Xojo | XQuery 和 XPath | XRegExp |
| MySQL | Oracle | PostgreSQL |
页面 URL:https://regexper.cn/posix.html
页面上次更新时间:2021 年 8 月 24 日
网站上次更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。