背景
Twitter閲覧アプリの作成中にツイートからURLリンクを引っ張ってこようと思った際に作った関数をメモしておく。
ソースコード
import UIKit
//Stringの配列を返してくれる関数
func getUrlText(text: String) -> [String] {
var results = [String]()
let urlPattern: String = "http(s)?://([a-zA-Z0-9-_]+\\.)+[a-zA-Z0-9-_]+(/[a-zA-Z0-9-_./?%&=]*)?"
var index: String.Index = text.startIndex
while index < text.endIndex {
let range_: Range<String.Index>? = text.range(of: urlPattern,
options: .regularExpression,
range: index ..< text.endIndex,
locale: .current)
if range_ != nil {
results.append(text[range_!])
index = range_!.upperBound
} else {
break
}
}
return results
}
//使用例
let str = "リンクはこれhttp://qiita.com/hoge1とhttp://qiita.com/hoge2です。"
let links: [String] = getUrlText(text: str)
print(links) // <-- ["http://qiita.com/hoge1", "http://qiita.com/hoge2"]
備考
NSRegularExpressionを使った方法が主流で前例があるようだったが、Stringのrangeメソッドという便利そうなものがせっかくできたのでそれを使ってみた。