快速入门
教程
工具和语言
示例
参考
书籍评论
Regex 工具
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 订阅和博客

如何在 Xojo(REALbasic)中使用正则表达式

Xojo(以前称为 REALbasic)包含一个内置的 RegEx 类。在内部,此类基于开源 PCRE 库。这对您作为 Xojo 开发人员来说意味着 RegEx 类为您提供了丰富的 Perl 兼容正则表达式。本网站上的 正则表达式教程 没有明确提及 Xojo。教程中关于 PCRE 的 regex 风味的所有内容也适用于 Xojo。唯一的例外是不区分大小写和“多行” 匹配模式。在 PCRE 中,它们默认关闭,而在 Xojo 中,它们默认开启。

Xojo 使用 PCRE 的 UTF-8 版本。这意味着,如果您要处理从文件或网络中检索到的非 ASCII 数据,则需要使用 Xojo 的 TextConverter 类将您的字符串转换为 UTF-8,然后再将它们传递给 RegEx 对象。您还需要使用 TextConverter 将 RegEx 类返回的字符串从 UTF-8 转换回您的应用程序正在使用的编码。

RegEx 类

要使用正则表达式,你需要创建 RegEx 类的实例。将你的正则表达式分配给 SearchPattern 属性。你可以在 Options 属性中设置各种选项,它是一个 RegExOptions 类的实例。

要检查正则表达式是否匹配特定字符串,请调用 RegEx 对象的 Search 方法,并将主题字符串作为参数传递。如果找到匹配项,此方法将返回 RegExMatch 类的实例,如果没有找到匹配项,则返回 Nil。要查找同一主题字符串中的第二个匹配项,请再次调用 Search 方法,而不传递任何参数。不要再次传递主题字符串,因为这样做会从字符串的开头重新开始搜索。不断调用 Search,不带任何参数,直到它返回 Nil,以遍历字符串中的所有正则表达式匹配项。

RegExMatch 类

当 Regex.Search 方法找到匹配项时,它会将匹配项的详细信息存储在 RegExMatch 对象中。此对象有三个属性。SubExpressionCount 属性返回正则表达式中捕获组的数量加一。例如,对于正则表达式 (1)(2),它返回 3。SubExpressionString 属性返回正则表达式或捕获组匹配的子字符串。SubExpressionString(0) 返回整个正则表达式匹配,而 SubExpressionString(1) 到 SubExpressionString(SubExpressionCount-1) 返回捕获组的匹配。SubExpressionStartB 返回整个正则表达式或捕获组之一的匹配开始的字节偏移,具体取决于你作为参数传递给该属性的数字索引。

RegExOptions 类

RegExOptions 类有九个属性,用于为你的正则表达式设置各种选项。

Xojo RegEx 源代码示例

'Prepare a regular expression object
Dim myRegEx As RegEx
Dim myMatch As RegExMatch
myRegEx = New RegEx
myRegEx.Options.TreatTargetAsOneLine = True
myRegEx.SearchPattern = "regex"
'Pop up all matches one by one
myMatch = myRegEx.Search(SubjectString)
While myMatch <> Nil
	MsgBox(myMatch.SubExpressionString(0))
	myMatch = myRegEx.Search()
Wend

搜索和替换

除了在字符串中查找正则表达式匹配之外,你还可以用另一个字符串替换匹配。为此,请设置 RegEx 对象的 ReplacementPattern 属性,然后调用 Replace 方法。将源字符串作为参数传递给 Replace 方法。该方法将返回已应用替换的字符串副本。RegEx.Options.ReplaceAllMatches 属性确定是否仅替换第一个正则表达式匹配还是替换所有正则表达式匹配。

在 ReplacementPattern 字符串中,你可以使用 $&$0\0 将整个正则表达式匹配插入到替换中。对于第一个 捕获组 的匹配,请使用 $1\1,对于第二个,请使用 $2\2,依此类推。

如果您希望对替换方式有更多控制,则可以像上面的代码片段中那样迭代正则表达式匹配,并为每个匹配调用 RegExMatch.Replace 方法。此方法有点名不副实,因为它实际上并没有替换任何内容。相反,它返回 RegEx.ReplacementPattern 字符串,其中对匹配和捕获组的所有引用都已替换。您可以使用这些结果自行进行替换。如果您希望为每个正则表达式匹配收集捕获组的组合,此方法也很有用。

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

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