Rexy is a pure Swift implementation of POSIX Regular Expressions.
- Pattern matching
- Capturing groups
- Replace method
- Matching operators
- Representation of a regular expression error
- Option sets with default constants for compilation flags (
cflag
) and regex matching flags (eflag
) - Unit test coverage
- No dependencies
When you want to check if a given string matches regular expression:
import Rexy
// Regular way
do {
let regex = try Regex("Tyrannosaurus")
regex.isMatch("Tyrannosaurus") // => true
regex.isMatch("Spinosaurus") // => false
} catch {
print(error)
}
// With custom operators
"Tyrannosaurus" =~ "T.*" // true
"Spinosaurus" =~ "T.*" // false
"Spinosaurus" !~ "T.*" // true
When you want to search an input string for all occurrences of a regular expression and get the matches:
import Rexy
do {
let regex = try Regex("[a-z]+")
regex.matches("a1b1") // ["a", "b"])
} catch {
print(error)
}
When you're interested only in the first occurrence:
import Rexy
do {
let regex = try Regex("[a-z]+")
regex.matches("a1b1") // "a"
} catch {
print(error)
}
When you want to match and capture groups:
import Rexy
do {
let regex = try Regex("(Tyrannosaurus) (Rex)")
regex.groups("Tyrannosaurus Rex") // => ["Tyrannosaurus", "Rex"]
regex.groups("Spinosaurus") // => []
} catch {
print(error)
}
When you want to replace all strings that match a regular expression pattern with a specified replacement string:
import Rexy
do {
let regex = try! Regex("Tyrannosaurus")
regex.replace("Tyrannosaurus Rex Tyrannosaurus", with: "Dinosaur") // => "Dinosaur Rex Dinosaur"
regex.replace("Spinosaurus", with: "Dinosaur") // => Spinosaurus
} catch {
print(error)
}
Rexy
is available through Swift Package Manager.
To install it, simply add the following lines to your Package.swift
:
.Package(url: "https://github.com/vadymmarkov/Rexy.git", versions: Version(0,1,0)..<Version(1,0,0))
Vadym Markov, [email protected]
Credits for inspiration go to POSIXRegex by Zewo
Check the CONTRIBUTING file for more info.
Rexy is available under the MIT license. See the LICENSE file for more info.