快速入门
教程
工具和语言
示例
参考
书籍评论
正则表达式工具
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 源和博客

Just Great Software 正则表达式引擎

Just Great Software (JGsoft) 正则表达式引擎由 Jan Goyvaerts 设计和开发,他也是此 正则表达式教程 的作者。此引擎是 Just Great Software 产品 PowerGREP(版本 3 及更高版本)、RegexBuddy(版本 2 及更高版本)和 RegexMagic(所有版本)的核心。它还为 EditPad Pro(版本 6 及更高版本)、EditPad Lite(版本 7 及更高版本)和 AceText(版本 2 及更高版本)中的正则表达式搜索功能提供支持。

此引擎及其正则表达式风格是专门为 PowerGREP、RegexBuddy 和 RegexMagic 开发的。JGsoft 风格融合了在最流行的正则表达式风格中找到的所有功能。它完全支持 Unicode 和广泛的旧版代码页。PowerGREP(版本 3 及更高版本)和 EditPad Pro(版本 7 及更高版本)中的引擎可以处理大于 4GB 的文件,而无需将文件拆分为任意块。

RegexBuddy 和 RegexMagic 具有 Just Great Software 引擎的特殊版本,可以模拟许多其他正则表达式风格的限制和特定风格的功能。在 RegexBuddy 或 RegexMagic 中选择正则表达式风格时,其所有功能都使用该风格。甚至内置 grep 也是如此。

Just Great Software 引擎不可用作可嵌入到其他应用程序中的组件。它是专门设计用于 Just Great Software 产品中,而不是作为通用引擎。除非您正在开发诸如 PowerGREP 或 RegexBuddy 之类的工具,其中正则表达式是核心功能,否则您的开发环境中已提供的正则表达式风格将绰绰有余。只需为您的用户提供帮助,并非常清楚地说明您的应用程序使用哪种正则表达式风格。然后,他们可以轻松地在此站点上查找具体信息。

JGsoft V2

PowerGREP 5 引入了 JGsoft 正则表达式风格的主要新版本,我们称之为 JGsoft V2。当您在 RegexBuddy 4 和 RegexMagic 2 中选择 PowerGREP 5 作为您的应用程序时,此风格也可用。JGsoft V2 带来了几个重要的新功能。它还带来了一些重大更改。

JGsoft V2 现在支持 平衡组(如 .NET 正则表达式风格)和 分支重置组(如 Perl 和 PCRE)。同样新增的是 字符类交集,使用 [class&&[intersect]] 语法,如 Java 和 Ruby。需要嵌套的一对方括号。JGsoft V2 不支持 [class&&intersect] 语法,因为这可能导致人们编写 [class&&intersect&&again],其在 Java 和 Ruby 中的行为不可预测。

在 Perl 和 PCRE 中,您可以使用 \K文本保留在匹配之外,以解决其对后向查找的限制。虽然在不受限制的后向查找的 JGsoft V2 中并不真正需要 \K,但如果您习惯以这种方式编写正则表达式,现在可以在 JGsoft V2 中像在 Perl 或 PCRE 中一样使用 \K

Perl、PCRE 和 Ruby 都支持正则表达式 递归子例程。这三种语言在很大程度上复制了彼此的语法,导致编写递归和子例程有多种方法。但这三种语言并未复制彼此的匹配行为,导致尽管语法相似,但行为差异明显。JGsoft V2 为递归和子例程调用提供了三组语法。每组语法都遵循这三种风格之一的匹配行为。与 PCRE 一样,(?P>name) 不捕获还原捕获组,并且 是原子性的。您可以通过它与原子组的相似性来记住此语法。与 PCRE 不同,JGsoft V2 还支持 (?P>1)(?P>0),因此您可以为编号调用和递归指定此行为。与 Perl 一样,(?R)(?1)(?&name) 不捕获还原捕获组,并且 允许回溯。您可以通过 Perl 代码中 &subroutine(); 调用中使用的符号来记住此语法。最后,与 Ruby 一样,\g<0>\g<1>\g<name> 捕获子例程调用的匹配不还原捕获组,并且 允许回溯。您可以通过 Ruby 的正则表达式风格不支持递归和子例程调用的任何其他语法的这一事实来记住此语法。

\h 是水平空格的新速记字符类。它包括空格、制表符和除行和段落中断之外的所有 Unicode 空格。\v 过去是匹配垂直制表符的转义符。现在 \v 是垂直空格的速记。这包括垂直制表符、换行符、分页符和段落中断。\v 分别匹配 CR 和 LF。\H\V 是这两个新速记的否定版本。

\R 是一个新的特殊转义符,它匹配任何换行符,包括 Unicode 换行符。它的特殊之处在于它将 CRLF 对视为不可分割的。如果 \R 的匹配尝试在字符串中的 CRLF 对之前开始,则单个 \R 匹配整个 CRLF 对。\R 不会回溯以仅匹配 CRLF 对中的 CR。因此,虽然 \R 可以匹配单个 CR 或单个 LF,但 \R{2} 无法匹配单个 CRLF 对。

\l\u 现在是 \p{Ll}\p{Lu} 的速记。它们匹配任何 Unicode 小写或大写字符。这些标记始终区分大小写。

POSIX 类别 使用符号 [[:alpha:]] 现在仅匹配 ASCII 字符。\p{Alpha} 符号仍匹配 Unicode 字符。[[:d:]][[:s:]][[:w:]][[:l:]][[:u:]] 现在是 [[:digit:]][[:space:]][[:word:]][[:lower:]][[:upper:]] 的简写。您可以将它们视为 \d\s\w\l\u 的仅 ASCII 版本。

\i\c 现在是 XML 简写字符类别\cA\cZ 不再作为 控制字符转义 受支持。

八进制转义现在必须写成 \o{377}。八进制数的范围从 \o{0}\o{177777}。旧的 \0377 语法现在是一个错误。JGsoft 版本从未支持过 \377,因为这与反向引用的语法太混淆了。现在 \0 也是一个错误,而不是匹配一个字面上的零。使用 \x00 匹配空字节。

替换字符串语法已经扩展了 **替换字符串条件** 以实现这一点。如果第一个捕获组参与了匹配,则 (?1匹配:不匹配) 插入 匹配;否则,插入 不匹配。就像正则表达式中的条件一样,找到零长度匹配的捕获组会被认为参与了匹配。使用命名的捕获组时,可以使用 (?{name}匹配:不匹配) 在替换字符串条件中引用它们。可以在条件中使用完整的替换字符串语法,包括嵌套条件。如果条件位于替换字符串的末尾,则可以省略括号。替换字符串条件的语法与 C++ Boost 库 中的语法相同。唯一的区别是 Boost 在替换字符串中的任何位置都使用括号进行分组,而 JGsoft V2 仅在条件周围识别它们。这样,您就不需要转义字面括号。引用不存在的组的条件在 JGsoft V2 中是一个错误。在 Boost 中,它们会插入“不匹配”文本。

由于添加了此语法,JGsoft V2 将 \?\:\(\) 视为转义字符,这些字符会逐字插入这四个标点字符之一。原始的 JGsoft 版本将这些字符视为字面反斜杠,将反斜杠和随后的标点字符都逐字插入替换中。

| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书评 |

| 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 |