Swiftで正規表現を使って文字列の操作を行う
Swiftで正規表現を使いたかったんだけど、調べて行くうちに、Swiftで正規表現ってなかなか面等らしく、どーしようかなと思っていると。
とても便利なStringExtensionを書いている方がいらっしゃたので、使わせていただきました。
Swift 3.0での基本的な正規表現を行うextension - Qiita
使用例
StringExtension
extension String { //絵文字など(2文字分)も含めた文字数を返します var count:Int{ let string_NS = self as NSString return string_NS.length } //正規表現の検索をします func pregMatche(pattern: String, options: NSRegularExpression.Options = []) -> Bool { let regex = try! NSRegularExpression(pattern: pattern, options: options) let matches = regex.matches(in: self, options: [], range: NSMakeRange(0, self.count)) return matches.count > 0 } //正規表現の検索結果を利用できます func pregMatche(pattern: String, options: NSRegularExpression.Options = [], matches: inout [String]) -> Bool { guard let regex = try? NSRegularExpression(pattern: pattern, options: options) else { return false } let targetStringRange = NSRange(location: 0, length: self.count) let results = regex.matches(in: self, options: [], range: targetStringRange) for i in 0 ..< results.count{ for j in 0 ..< results[i].numberOfRanges{ let range = results[i].rangeAt(j) matches.append((self as NSString).substring(with: range)) } } return results.count > 0 } //正規表現の置換をします func pregReplace(pattern: String, with: String, options: NSRegularExpression.Options = []) -> String { let regex = try! NSRegularExpression(pattern: pattern, options: options) return regex.stringByReplacingMatches(in: self, options: [], range: NSMakeRange(0, self.count), withTemplate: with) } }
実際に使うときはこんな感じ
var alphabet = "title=ABCDE&body=FGHIJ" if alphabet.pregMatche(pattern: "ABCDE") { print("match") // martch }else{ print("not match") } var hoge: [String] = [] _ = alphabet.pregMatche(pattern: "^title=.*&body", matches: &hoge) print(hoge) // ["title=ABCDE&body"] let fuga = alphabet.pregReplace(pattern: "^title=.*&body", with: "title=abcde&body") print(fuga) // title=abcde&body=FGHIJ
Swift Extension 便利だ
Swift Extension を初めて意識して使ってみたんですが、なかなか便利、というか使える場面が多そうだなと思いました。
Swift Extension とは、
エクステンションとは拡張という意味ですが、読んで字の如く、エクステンションを使うと既存のクラスや構造体、列挙型に新たに機能を追加することができます。Objective-Cにもカテゴリーという、クラスを拡張する機能がありますがこれと似ています。
具体的には次のようなことができます。
・計算型プロパティと静的な計算型プロパティ(計算型の型プロパティ)を追加できます。
・インスタンスメソッドと型メソッドを追加できます。
・イニシャライザを追加できます。(追加できるのはコンビニエンスイニシャライザのみです。指定イニシャライザやデイニシャライザは追加できません。)
・サブスクリプトを追加できます。
・ネストした型を定義してそれを使うことができます。
・新たなプロトコルに適合させることができます。
ということらしいです。
こちらにSwift Extension 集というのがありました。またこれから使う機会があれば使ってみようと思います。
http://o-tyazuke.hatenablog.com/entry/2016/12/13/135705
おまけ
こちらもどうぞ
このブログのTwitterアカウントを作成しました!!
フォロー待ってます!!
twitter.com