struct Regex { let pattern: String let options: NSRegularExpressionOptions! private var matcher: NSRegularExpression { return NSRegularExpression(pattern: self.pattern, options: self.options, error: nil) } init(pattern: String, options: NSRegularExpressionOptions = nil) { self.pattern = pattern self.options = options } func match(string: String, options: NSMatchingOptions = nil) -> Bool { return self.matcher.numberOfMatchesInString(string, options: options, range: NSMakeRange(0, string.utf16Count)) != 0 } } extension Regex: StringLiteralConvertible { typealias ExtendedGraphemeClusterLiteralType = StringLiteralType init(unicodeScalarLiteral value: UnicodeScalarLiteralType) { self.pattern = "\(value)" } init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType) { self.pattern = value } init(stringLiteral value: StringLiteralType) { self.pattern = value } }