正則表達(dá)式的使用時(shí)機(jī):
- 從一組字符串中, 判斷是否含有某組(個(gè))特定的字符串.如:
- 判斷某字符串是否含有某組字符串:電話(huà)號(hào)碼/郵箱/QQ號(hào)碼,等等
- 判斷某字符串是否含有某個(gè)字符:"[", "%", "$", 等等
正則表達(dá)式的使用方法:
正則表達(dá)式的使用只有3步:
1.編寫(xiě)正則表達(dá)式規(guī)則
2.根據(jù)規(guī)則創(chuàng)建正則表達(dá)式對(duì)象
3.根據(jù)對(duì)象匹配數(shù)據(jù)
而各種常見(jiàn)的規(guī)則在網(wǎng)上已被各路大神寫(xiě)好,95%的coder只要復(fù)制就可以了, I am included.
下面是一個(gè)"簡(jiǎn)單"的示例方法,匹配郵箱
private func validateEmail(str: String) -> Bool {
// 1.編寫(xiě)郵箱規(guī)則(來(lái)自Internet)
let pattern = "^[A-Za-zd]+([-_.][A-Za-zd]+)*@([A-Za-zd]+[-.])+[A-Za-zd]{2,5}$"
// 2.根據(jù)規(guī)則創(chuàng)建正則表達(dá)式對(duì)象
guard let regex = try? NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions(rawValue: 0)) else {
return false
}
// 3.根據(jù)對(duì)象匹配數(shù)據(jù)
// range: 檢驗(yàn)傳入字符串str的哪些部分,此處為全部
let result: Int = regex.numberOfMatchesInString(str,
options: NSMatchingOptions(rawValue: 0),
range: NSMakeRange(0, str.characters.count))
return result > 0
}
Xcode提供下面幾個(gè)操作正則表達(dá)式的方法:
- 返回匹配規(guī)則的字符串的個(gè)數(shù)
public func numberOfMatchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> Int
- 返回第一個(gè)匹配規(guī)則的子串的范圍
public func rangeOfFirstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSRange
- 返回第一個(gè)匹配規(guī)則的子串的結(jié)果集(包含范圍)
public func firstMatchInString(string: String, options: NSMatchingOptions, range: NSRange) -> NSTextCheckingResult?
- 返回所有匹配規(guī)則的子串的結(jié)果集數(shù)組
public func matchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> [NSTextCheckingResult]
//示例
//根據(jù)正則表達(dá)式對(duì)象取得結(jié)果.
let array = regex.matchesInString(str,
options: NSMatchingOptions(rawValue: 0),
range: NSMakeRange(0,
str.characters.count))
//遍歷結(jié)果NSRange數(shù)組,取出結(jié)果
for result in array {
let temp = (str as! NSString).substringWithRange(result.range)
print(temp)
}
如果有多個(gè)規(guī)則, 使用 "|" 連接
//1 編寫(xiě)正則表達(dá)式規(guī)則
//1.1 pattern1: 得到此形式文本:[n個(gè)文本].
//1.2 \w:匹配字母或數(shù)字或下劃線(xiàn)或漢字 [a-zA-Z_0-9] 常用
//1.3 +: 重復(fù)一次或更多次
let pattern1 = "\\[\\w+\\]"
let pattern2 = "@\\w+:"
let pattern3 = "#\\w+#"
let pattern4 = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?"
// 多個(gè)規(guī)則可以使用 | 來(lái)連接
let pattern = pattern1 + "|" + pattern2 + "|" + pattern3 + "|" + pattern4
此外,蘋(píng)果自帶的探測(cè)器集成了很多正則表達(dá)式.如取出網(wǎng)址
let str = "@FanLu:快看網(wǎng)址~ http://www.reibang.com/collection/9e553f618413 ,一起探討文章."
//2.寫(xiě)正則對(duì)象,根據(jù)規(guī)則
guard let detechtor =
try? NSDataDetector(types: NSTextCheckingType.Link.rawValue) else {
return
}
//3.取得結(jié)果,根據(jù)對(duì)象.生成的是數(shù)組
let array = detechtor.matchesInString(str,
options: NSMatchingOptions(rawValue: 0),
range: NSMakeRange(0, str.characters.count))
//遍歷數(shù)組,取出結(jié)果
for result in array {
let temp = (str as! NSString).substringWithRange(result.range)
print(temp)
}
聲明: 任何博文不可盡信,智者千慮,必有一失.何況世上有多少智者?
- 歡迎探討,歡迎拍磚.不過(guò)這篇好像沒(méi)什么深度可拍的.