- 正則運算符定義
- 喵神提供的一段定義正則運算符(超級好用!!!),使用范例
if "onev@onevcat.com" =~
"^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$" {
println("有效的郵箱地址")
}
// 輸出:
// 有效的郵箱地址
struct RegexHelper {
let regex: NSRegularExpression
init(_ pattern: String) throws {
try regex = NSRegularExpression(pattern: pattern,
options: .CaseInsensitive)
}
func match(inputStr: String) -> Bool {
let matches = regex.matchesInString(inputStr,
options: [],
range: NSMakeRange(0, inputStr.utf16.count))
return matches.count > 0
}
}
infix operator =~ {
associativity none
precedence 130
}
func =~(lhs: String, rhs: String) -> Bool {
do {
return try RegexHelper(rhs).match(lhs)
} catch _ {
return false
}
}
- 下面是一些對String類的擴(kuò)展(正則相關(guān))
- 返回所有匹配到的字串集合,返回例如: [str1,str2,str3]
/**
返回所有匹配到的字串集合
- parameter pattern: 正則匹配規(guī)則
- parameter inputStr: 要匹配的文本
- returns:匹配到的字串集合
*/
func bl_regexWithPattern(pattern : String,
inputStr: String) -> [String] {
// 使用正則表達(dá)式一定要加try語句
do {
// - 1粮宛、創(chuàng)建規(guī)則
let pattern = pattern
// - 2梧兼、創(chuàng)建正則表達(dá)式對象
let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
// - 3正压、開始匹配
let res = regex.matchesInString(inputStr, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, inputStr.characters.count))
// 輸出結(jié)果
var subStrArray = [String]()
for checkingRes in res {
let subStr = (inputStr as NSString).substringWithRange(checkingRes.range)
subStrArray.append(subStr)
}
return subStrArray
}
catch {
print(error)
}
//不匹配返回空串
return [String]()
}
- 返回一個字典 key : 匹配到的字串, Value : 匹配到的字串
- 返回例如 : [ keyStr : [NSRange] ]
/// 返回一個字典 key : 匹配到的字串, Value : 匹配到的字串的Range數(shù)組
func bl_regexWithPatternAndRange(pattern : String,inputStr: String) -> [[String : [NSRange]]]? {
let strArray = bl_regexWithPattern(pattern, inputStr: inputStr)
var array = [[String : [NSRange]]]()
for subStr in strArray {
var dic = [String : [NSRange]]()
let subStrRangeArray = bl_stringOfRangeArray(subStr, inputStr: inputStr)
dic[subStr] = subStrRangeArray
array.append(dic)
}
return array
}
/// 返回一個數(shù)組 Value : 匹配到的字串的Range數(shù)組
func bl_stringOfRangeArray(subStr : String, inputStr : String) -> [NSRange]? {
guard inputStr =~ subStr else{
return [NSMakeRange(0, 0)]
}
//設(shè)置Range數(shù)組
var rangeArray = [NSRange]()
//設(shè)置母串
var bigString = inputStr
// - 1馋贤、創(chuàng)建規(guī)則
let pattern = subStr
var count : Int = 0
do{
let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
//獲取子串個數(shù)
count = regex.numberOfMatchesInString(bigString, options: .ReportProgress, range: NSMakeRange(0, bigString.characters.count))
}catch{
print(error)
}
for i in 0..<count {
var subRange = (bigString as NSString).rangeOfString(pattern)
let cutLoc = subRange.location + subRange.length
let cutLen = bigString.characters.count - cutLoc
bigString = (bigString as NSString).substringWithRange(NSMakeRange(cutLoc, cutLen))
if i > 0 {
let preSubRange = rangeArray[i - 1]
subRange.location = preSubRange.location + preSubRange.length
}
rangeArray.append(subRange)
}
return rangeArray
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者