Title here
Summary here
Our example will demonstrate common regular expression tasks in Groovy. Here’s the full source code:
import java.util.regex.Pattern
import java.util.regex.Matcher
// This tests whether a pattern matches a string.
def match = "peach" =~ /p([a-z]+)ch/
println match.matches()
// For other regex tasks, you'll need to create a Pattern object.
def pattern = ~/p([a-z]+)ch/
// Many methods are available on these objects. Here's a match test like we saw earlier.
println pattern.matcher("peach").matches()
// This finds the match for the regex.
def matcher = "peach punch" =~ pattern
println matcher[0]
// This also finds the first match but returns the start and end indexes for the match.
matcher = "peach punch" =~ pattern
println "idx: ${matcher.start()}, ${matcher.end()}"
// The find() method includes information about both the whole-pattern matches
// and the submatches within those matches.
matcher = "peach punch" =~ pattern
if (matcher.find()) {
println [matcher.group(0), matcher.group(1)]
}
// Similarly, this will return information about the indexes of matches and submatches.
matcher = "peach punch" =~ pattern
if (matcher.find()) {
println [matcher.start(0), matcher.end(0), matcher.start(1), matcher.end(1)]
}
// To find all matches for a regex:
println ("peach punch pinch" =~ pattern).findAll()
// These 'all' variants are available for other operations as well.
matcher = "peach punch pinch" =~ pattern
def allMatches = []
while (matcher.find()) {
allMatches << [matcher.start(0), matcher.end(0), matcher.start(1), matcher.end(1)]
}
println "all: $allMatches"
// Providing a limit to findAll will restrict the number of matches.
println ("peach punch pinch" =~ pattern).findAll(2)
// The =~ operator creates a Matcher object, which can be used directly in boolean contexts.
println ("peach" =~ pattern).asBoolean()
// When creating global variables with regular expressions, you can use the ~ operator.
pattern = ~/p([a-z]+)ch/
println "pattern: $pattern"
// The replaceAll method can be used to replace subsets of strings with other values.
println "a peach".replaceAll(pattern, "<fruit>")
// The replaceAll method also accepts a closure for more complex replacements.
def result = "a peach".replaceAll(pattern) { match, group ->
return match.toUpperCase()
}
println result
To run the program, save it as RegularExpressions.groovy
and use the groovy
command:
$ groovy RegularExpressions.groovy
true
true
peach
idx: 0, 5
[peach, ea]
[0, 5, 1, 3]
[peach, punch, pinch]
all: [[0, 5, 1, 3], [6, 11, 7, 9], [12, 17, 13, 15]]
[peach, punch]
true
pattern: p([a-z]+)ch
a <fruit>
a PEACH
Groovy provides powerful built-in support for regular expressions. The =~
operator creates a Matcher
object, while the ==~
operator performs a strict match. The ~
operator creates a Pattern
object.
For a complete reference on Groovy regular expressions, check the official Groovy documentation.