Edited at

Swift2.0で正規表現を簡単に扱う。

More than 3 years have passed since last update.


Swift2.0

Swfit2.0からSwiftのお勉強を始めたのですが、

ブログなどで共有していただいているSwfitのコードが通らなくて難儀する日々です。

SwiftでJSのような手軽さで正規表現をマッチさせるLibraryを書かれていた人がいたのですが、

Swift2.0ではビルドが通りませんでした。

それを修正してみたので共有します。

matchesInStringのエラーハンドラーがなくなりかわりにtryを使わないといけなくなったみたいです。

http://easyramble.com/swift-regular-expression-utility.html


ソースコード


swift|Regexp.swift

import Foundation

class Regexp {
let internalRegexp: NSRegularExpression
let pattern: String

init(_ pattern: String) {
self.pattern = pattern
self.internalRegexp = try! NSRegularExpression( pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
}

func isMatch(input: String) -> Bool {
let matches = self.internalRegexp.matchesInString( input, options: [], range:NSMakeRange(0, input.characters.count) )
return matches.count > 0
}

func matches(input: String) -> [String]? {
if self.isMatch(input) {
let matches = self.internalRegexp.matchesInString( input, options: [], range:NSMakeRange(0, input.characters.count) )
var results: [String] = []
for i in 0 ..< matches.count {
results.append( (input as NSString).substringWithRange(matches[i].range) )
}
return results
}
return nil
}
}



使い方

URLを抽出してみます。

使い方自体は参考ページと変わりません。

let pattern = "http://([a-zA-Z0-9]|.)+"

let str:String = "銘柄コード:1557,銘柄名:SPDR S&P500 ETF TRUST板価格:25270.0,板数量:10000にいびつな板(寄与率:81.20178%)を検出しました。http://oreore.com/servlets/Action?SRC=1234"
Regexp(pattern).isMatch(str) //マッチした結果 ここではtrue
let ret:[String] = Regexp(pattern).matches(str)! //http以下を取得