import UIKit /* 練習1:匹配abc 練習2:包含一個a~z,後面必須是0~9 -->[a-z][0-9]或者[a-z]\d * [a-z] : a~z * [0-9]/\d : 0~9:[0-9]/\d :表示[0-9]或\d,\d表示數字的意思 練習3:必須第一個是字母,第二個是數字 -->^[a-z][0-9]$ * ^[a-z] : 表示首字母必須是a~z * \d{2,10} : 數字有2到10 * [a-z]$ : 表示必須以a-z的字母結尾 練習4:必須第一個是字母,字母后面跟上4~9個數字 練習5:不能是數字0-9 * [^0-9] : 不能是0~9 練習6:QQ匹配:^[1-9]\d{4,11}$ 都是數字 5~12位 而且第一位不能是0 練習7:手機號碼匹配^1[3578]\d{9}$ 1.以13/15/17/18 2.長度是11 */ class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let str = "13324132423" // 1.建立正則表達式規則 let pattern = "^1[3578]\\d{9}$"// \\d{9},其中\\表示轉義, \\d{9}表示,後面有9位數字 // 2.建立正則表達式對象(拋出異常throw用:try try? try!) guard let regex = try? NSRegularExpression(pattern: pattern, options: []) else { return } // 3.匹配字符串中內容:swift中的字符串的長度用:str.characters.count let results = regex.matches(in: str, options: [], range: NSRange(location: 0, length: str.characters.count)) // 4.遍歷數組,獲取結果:字符串的截取操做通常都是將swift的字符串轉爲oc的字符串來處理 for result in results { print((str as NSString).substring(with: result.range)) print(result.range) } } }
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let statusText = "@coderwhy:【動物尖叫合輯】#肥豬流#貓頭鷹這麼尖叫[偷笑]、@M了個J: 老鼠這麼尖叫、兔子這麼尖叫[吃驚]、@花滿樓: 莫名奇#小籠包#妙的笑到最後[好愛哦]!~ http://t.cn/zYBuKZ8/" /* 1: 匹配出來@coderwhy:let pattern = "@.*?:" ,其中 .* 用來表示表示任意字符,加上 ?來表示,只要遇到:就當即中止匹配,沒有?的話,它會一直匹配到最後一個: 2: 匹配表情: let pattern = "\\[.*?\\]" ,由於[],有特殊的含義,因此要進行轉義,轉義就用\轉義,\在siwft字符串中也有特殊含義,因此就再用\來表示,轉義就用\,若是轉義後,還有特殊含義,就再用\來表示 **/ // 1.建立匹配規則 // let pattern = "@.*?:" // 匹配出來@coderwhy: // let pattern = "#.*?#" // 匹配話題 // let pattern = "\\[.*?\\]" // 匹配表情 let pattern = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?" // URL網址 // 2.建立正則表達式對象 guard let regex = try? NSRegularExpression(pattern: pattern, options: []) else { return } // 3.開始匹配 let results = regex.matchesInString(statusText, options: [], range: NSRange(location: 0, length: statusText.characters.count)) // 4.獲取結果 for result in results { print((statusText as NSString).substringWithRange(result.range)) } } }