Regular Expressions are a fantastic way to search through text. Apple provides support for them via the NSRegularExpression class. It has great support for matching, extracting, etc. Its API can be a bit verbose for simple matches though. Today we'll look at Regex, a tiny little library from Adam Sharp that makes writing regular expressions in Swift much more friendly and expressive. Let's check it out:

Regex has a bunch of great features, but at its core it allows us to take regular expression code like this:

let stringToMatch = "star wars" let regex = try! NSRegularExpression ( pattern : "star (wars|trek)" , options : NSRegularExpressionOptions ( rawValue : 0 ) ) let isWarsOrTrek = regex . firstMatchInString ( stringToMatch , options : NSMatchingOptions ( rawValue : 0 ), range : NSMakeRange ( 0 , stringToMatch . characters . count ) ) != nil

...and turn it into something just a tad more readable:

Regex ( "star (wars|trek)" ) . matches ( stringToMatch )

Regex is backed by NSRegularExpression under the hood, and it does a great job of "swift-ifying" its API. In addition to simple Boolean checks, we can also use Regex in a few other rather Swifty ways. For example, pattern matching:

switch starThing { case Regex ( "gate$" ): print ( "dial the gate!" ) case Regex ( "wars$" ): print ( "the force is strong" ) case Regex ( "trek$" ): print ( "set phasers to stun" ) default : break }

Last but not least, we can easily grab any captured strings:

let starRegex = Regex ( "star( trek| wars|gate)" ) if let captured = starRegex . match ( inputString )? . captures . first { print ( "You chose: \( captured ) ." ) }

More info about Regex can be found at git.io/regex