LoginSignup
39
41

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-11-02

Swift2.0

Swfit2.0からSwiftのお勉強を始めたのですが、
ブログなどで共有していただいているSwfitのコードが通らなくて難儀する日々です。

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

Swift2.0ではビルドが通りませんでした。
それを修正してみたので共有します。
matchesInStringのエラーハンドラーがなくなりかわりにtryを使わないといけなくなったみたいです。

ソースコード

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以下を取得
39
41
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
41