正则表达式工具 |
grep |
语言和函数库 |
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 |
本网站的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式范例 |
正则表达式参考 |
替换字符串参考 |
在 Groovy 中使用正则表达式
由于 Groovy 是基于 Java,因此您可以在 Groovy 中使用 Java 的正则表达式套件。只要在 Groovy 原代码的最上方加上 import java.util.regex.*
。使用正则表达式的任何 Java 代码也会自动在您的 Groovy 代码中运作。
使用冗长的 Java 代码在 Groovy 中处理正则表达式并不会很 groovy。Groovy 有一堆语言功能,可以让使用正则表达式的代码简洁许多。您可以将 Groovy 专属语法与一般的 Java 代码混合使用。所有内容都基于 java.util.regex
套件,您无论如何都需要导入这个套件。
Groovy 字符串
Java 只有单一字符串样式。字符串置于双引号之间。字符串中的双引号和反斜线必须以反斜线作为转义字符。这会在正则表达式文本中产生一大堆反斜线。
Groovy 有五种字符串样式。字符串可以置於单引号、双引号、三重单引号和三重双引号之间。使用三重单引号或双引号可以让字符串跨越多行,这对于自由间距的正则表达式非常方便。遗憾的是,这四种字符串样式都需要反斜线作为转义字符。
第五种字符串样式特别提供给正则表达式。字符串置于正斜线之间,且字符串中的正斜线(而非反斜线)才需要转义。这的确是一种字符串样式。/hello/
和 "hello"
都是 java.lang.String
的字面实例。遗憾的是,以正斜线分隔的字符串无法跨行,因此无法将其用于自由间距的正则表达式。
Groovy 模式和比对器
若要实际将字符串用作正则表达式,您需要实例化 java.util.regex.Pattern
类别。若要实际对字符串使用该模式,您需要实例化 java.util.regex.Matcher
类别。您在 Groovy 中使用这些类别的方式与在 Java 中相同。但 Groovy 提供了一些特殊语法,让您可以用更少的输入创建这些实例。
若要创建 Pattern
实例,只需在包含正则表达式的字符串前面加上波浪号。字符串可以使用 Groovy 的五种字符串样式中的任何一种。将此模式指派给变量时,请务必在指定操作符与波浪号之间留一个空格。
Pattern myRegex = ~/regex/
您实际上不会经常以这种方式实例化模式。您唯一需要 Pattern
实例的时候是分割字符串,这需要您调用 Pattern.split()
。若要寻找正则表达式比对或使用正则表达式进行搜索和取代,您需要一个 Matcher
实例,将模式绑定到字符串。在 Groovy 中,您可以使用 =~
操作符直接从包含正则表达式的字面字符串创建此实例。这次 =
和 ~
之间没有空格。
Matcher myMatcher = "subject" =~ /regex/
这是
Matcher myMatcher = Pattern.compile(/regex/).matcher("subject")
最后,==~
操作符是测试正则表达式是否能完全比对字符串的快速方式。myString ==~ /regex/
等同于 myString.matches(/regex/)
。若要寻找部分比对,您需要使用 Matcher
。