正则表达式工具 |
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 |
本网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于本网站 |
RSS 源和博客 |
GNU 是“GNU’s Not Unix”的缩写,是一个致力于为世界提供所有在 Unix 系统上常见的工具的免费和开放实现的项目。大多数 Linux 系统都附带了全套 GNU 应用程序。这显然包括传统的正则表达式实用程序,如 grep、sed 和 awk。
GNU 对这些工具的实现遵循 POSIX 标准,并添加了 GNU 扩展。GNU 扩展的效果是 基本正则表达式 风格和 扩展正则表达式 风格都提供了完全相同的功能。唯一的区别是,BRE 将使用反斜杠赋予各种字符特殊含义,而 ERE 将使用反斜杠消除相同字符的特殊含义。
基本正则表达式或 BRE 风格可能是当今仍在使用的最古老的正则表达式风格。GNU 实用程序 grep、ed 和 sed 使用它。区别这种风格的一件事是,大多数元字符需要一个反斜杠来赋予元字符其风格。包括 GNU ERE 在内的其他大多数风格使用反斜杠来抑制元字符的含义。使用反斜杠来转义永远不是元字符的字符是一个错误。
BRE 支持 POSIX 方括号表达式,它类似于其他正则表达式风格中的字符类,具有一些特殊功能。使用通常的元字符的其他功能包括 点 匹配除换行符之外的任何字符,插入符号和美元 匹配字符串的开头和结尾,以及 星号 重复令牌零次或多次。要按字面意思匹配所有这些字符,请使用反斜杠对其进行转义。
其他 BRE 元字符需要一个反斜杠来赋予它们特殊含义。原因是最早版本的 UNIX grep 不支持这些字符。grep 的开发者希望保持它与现有正则表达式的兼容性,这些表达式可能将这些字符用作字面字符。BRE a{1,2} 从字面上匹配 a{1,2},而 a\{1,2\} 匹配 a 或 aa。令牌可以用 \( 和 \) 分组。反向引用通常为 \1 到 \9。最多允许 9 个组。例如,\(ab\)\1 匹配 abab,而 (ab)\1 无效,因为没有与反向引用 \1 对应的捕获组。使用 \\1 从字面上匹配 \1。
在 POSIX BRE 提供的内容之上,如上所述,GNU 扩展提供了 \? 和 \+ 作为 \{0,1\} 和 \{1,\} 的替代语法。它通过 \| 添加了交替,这是 POSIX BRE 中非常缺少的东西。事实上,这些扩展意味着 GNU BRE 具有与 GNU ERE 完全相同的功能,除了 +、?、|、大括号和小括号需要反斜杠赋予它们特殊含义,而不是取消含义。
GNU 实用程序 egrep 和 awk 以及 emacs 编辑器使用扩展正则表达式或 ERE 风格。在此上下文中,“扩展”纯粹是历史参考。GNU 扩展使 BRE 和 ERE 风格在功能上相同。
所有元字符都有其含义,无需反斜杠,就像在现代正则表达式风格中一样。你可以使用反斜杠来抑制所有元字符的含义。转义不是元字符的字符是一个错误。
量词 ?、+、{n}、{n,m} 和 {n,} 分别重复前一个令牌 0 次或 1 次、1 次或多次、n 次、n 到 m 次和 n 次或更多次。交替 通过通常的竖线 | 来支持。未装饰的小括号创建一个组,例如 (abc){2} 匹配 abcabc。
POSIX ERE 不支持 反向引用。GNU 扩展添加了它们,使用相同的 \1 到 \9 语法。
GNU 扩展不仅让这两种风格相同。它们还添加了一些新语法和一些全新功能。速记类 \w、\W、\s 和 \S 可以用来代替 [[:alnum:]_]、[^[:alnum:]_]、[[:space:]] 和 [^[:space:]]。你可以在正则表达式中直接使用它们,但不能在方括号表达式中使用。方括号表达式中的反斜杠始终是文本。
新功能是 单词边界 和 锚点。与现代风格一样,GNU 支持 \b 在单词边界处匹配,\B 在非单词边界处匹配。\< 在单词开头处匹配,\> 在单词结尾处匹配。锚点 \`(反引号)在主题字符串的开头处匹配,而 \'(单引号)在结尾处匹配。这些在可以同时对多行文本匹配正则表达式的工具中很有用,因为那时 ^ 将在行首匹配,$ 在行尾匹配。
如果你不能在自己的(开源)应用程序中使用他们的正则表达式实现,GNU 就不是 GNU。要做到这一点,你需要 下载 Gnulib。使用附带的 gnulib-tool 将正则表达式模块复制到应用程序的源代码树中。
正则表达式模块提供了标准 POSIX 函数 regcomp() 用于编译正则表达式,regerror() 用于处理编译错误,regexec() 用于使用已编译的正则表达式运行搜索,regfree() 用于清理你完成的正则表达式。
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |
| 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 |
页面 URL:https://regexper.cn/gnu.html
页面上次更新时间:2021 年 11 月 5 日
网站上次更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。