七天學會 swift - NSPredicate Day4


Cocoa 框架中的 NSPredicate 用於查詢,用法類似於 SQL 中的 Where


初始化

NSPredicate(format:"")

用法

  1. 查詢值是否存在於一個區間內

    var number2 = 0
    var numberPre2 = NSPredicate(format: "SELF BETWEEN{1,5}")
    var bool2 = numberPre2.evaluateWithObject(number2)
    

    結果

    //當number2 = 0   印出:bool2 為false
    //當number2 = 1   印出:bool2 為true
    
  2. 字串相關

    • 判斷字串中是否包含另一個字串
      var str3 = "dd"
      var pre3 = NSPredicate(format: "SELF CONTAINS[cd] %@", str3)
      var bool3 = pre3.evaluateWithObject("dsadd")
      
      結果
      //當str3 = "da"   印出:bool3=false
      //當str3 = "dd"   印出:bool3=true
      
    • 判斷是否以某個字串做開頭
      var str3 = "dd"
      var pre3 = NSPredicate(format: "SELF BEGINSWITH[cd] %@", str3)
      var bool3 = pre3.evaluateWithObject("ddacd")
      
      結果
      //當str3 = "da"   印出:bool3=false
      //當str3 = "dd"   印出:bool3=true
      
    • 判斷是否以某個字串做結尾
      var str3 = "dd"
      var pre3 = NSPredicate(format: "SELF ENDSWITH[cd] %@", str3)
      var bool3 = pre3.evaluateWithObject("dcadd")
      
      結果
      //當str3 = "da"   打印:bool3=false
      //當str3 = "dd"   打印:bool3=true
      

  1. 正規表示

    var number = "^[0-9]+$"   //判斷字串是否為 0 - 9 的純數字
    var numberPre = NSPredicate(format: "SELF MATCHES %@", number)
    var boo3 = numberPre.evaluateWithObject("13140000000")
    

    結果

    //印出結果為 true
    

    也可一次給定兩種以上的條件

    var number = "^[0-9]+[A-Z]$"   
    //判斷字串是否為數字 0 - 9 開頭, A - Z 結尾
    var numberPre = NSPredicate(format: "SELF MATCHES %@", number)
    var boo3 = numberPre.evaluateWithObject("938572jf89G")
    

    結果

    //印出結果為 true
    
  2. 常用正規表示式

正規表示式 說明及範例 比對不成立之字串
/a/ 含字母 “a” 的字串,例如 “ab”, “bac”, “cba” “xyz”
/a./ 含字母 “a” 以及其後任一個字元的字串,例如 “ab”, “bac” “a”, “ba”
/^xy/ 以 “xy” 開始的字串,例如 “xyz”, “xyab” “axy”, “bxy”
/xy$/ 以 “xy” 結尾的字串,例如 “axy”, “abxy” “xya”, “xyb”
[135] 包含 “1” 或 “3” 或 “5” 的字串,例如:”a3b”, “1xy” “y2k”
[0-9] 含數字之字串 不含數字之字串
[a-z0-9] 含數字或小寫字母之字串 不含數字及小寫字母之字串
[a-zA-Z0-9] 含數字或字母之字串 不含數字及字母之字串
[^0-9] 不含數字之字串 含數字之字串
[^aeiouAEIOU] 不含母音之字串 含母音之字串
[^\^] 不含 “^” 之字串,例如 “xyz”, “abc” “xy^”, “a^bc”

正規表示式的特定字元 說明 等效的正規表示式
\d 數字 [0-9]
\D 非數字 [^0-9]
\w 數字、字母、底線 [a-zA-Z0-9_]
\W 非 \w [^a-zA-Z0-9_]
\s 空白字元 [ \r\t\n\f]
\S 非空白字元 [^ \r\t\n\f]

正規表示式 說明
/a?/ 零或一個 a
/a+/ 一或多個 a
/a*/ 零或多個 a
/a{4}/ 四個 a
/a{5,10}/ 五至十個 a
/a{5,}/ 至少五個 a
/a{,3}/ 至多三個 a
/a.{5}b/ a 和 b中間夾五個(非換行)字元

字元 說明 簡單範例
\ 避開特殊字元 /A*/ 可用於比對 “A”,其中 是一個特殊字元,為避開其特殊意義,所以必須加上 “\”
^ 比對輸入列的啟始位置 /^A/ 可比對 “Abcd” 中的 “A”,但不可比對 “aAb”
$ 比對輸入列的結束位置 /A$/ 可比對 “bcdA” 中的 “A”,但不可比對 “aAb”
* 比對前一個字元零次或更多次 /bo*/ 可比對 “Good boook” 中的 “booo”,亦可比對 “Good bk” 中的 “b”
+ 比對前一個字元一次或更多次,等效於 {1,} /a+/ 可比對 “caaandy” 中的 “aaa”,但不可比對 “cndy”
? 比對前一個字元零次或一次 /e?l/ 可比對 “angel” 中的 “el”,也可以比對 “angle” 中的 “l”
. 比對任何一個字元(但換行符號不算) /.n/ 可比對 “nay, an apple is on the tree” 中的 “an” 和 “on”,但不可比對 “nay”
(x) 比對 x 並將符合的部分存入一個變數 /(a) and (b)/ 可比對 “aaa and bb” 中的 “aaa” 和 “bb”,並將這兩個比對得到的字串設定至變數 RegExp.$1 和 RegExp.$2。
xy 比對 x 或 y /ab/g 可比對 “aaa and bb” 中的 “aaa” 和 “bb”
{n} 比對前一個字元 n 次,n 為一個正整數 /a{3}/ 可比對 “lllaaalaa” 其中的 “aaa”,但不可比對 “aa”
{n,} 比對前一個字元至少 n 次,n 為一個正整數 /a{3,}/ 可比對 “aa aaa aaaa” 其中的 “aaa” 及 “aaaa”,但不可比對 “aa”
{n,m} 比對前一個字元至少 n 次,至多 m 次,m、n 均為正整數 /a{3,4}/ 可比對 “aa aaa aaaa aaaaa” 其中的 “aaa” 及 “aaaa”,但不可比對 “aa” 及 “aaaaa”
[xyz] 比對中括弧內的任一個字元 /[ecm]/ 可比對 “welcome” 中的 “e” 或 “c” 或 “m”
[^xyz] 比對不在中括弧內出現的任一個字元 /[^ecm]/ 可比對 “welcome” 中的 “w”、”l”、”o”,可見出其與 [xyz] 功能相反。(同時請注意 /^/ 與 [^] 之間功能的不同。)
[\b] 比對退位字元(Backspace character) 可以比對一個 backspace ,也請注意 [\b] 與 \b 之間的差別
\b 比對英文字的邊界,例如空格 例如 /\bn\w/ 可以比對 “noonday” 中的 ‘no’ ;/\wy\b/ 可比對 “possibly yesterday.” 中的 ‘ly’
\B 比對非「英文字的邊界」 例如, /\w\Bn/ 可以比對 “noonday” 中的 ‘on’ ,另外 /y\B\w/ 可以比對 “possibly yesterday.” 中的 ‘ye’
#swift #iOS
這個系列將會帶大家入門 swift,內容上會較簡單,適合剛學習寫程式的新手






Related Posts

Day02  深入了解 Lazy-load 的背後實作 - Intersection Observer API

Day02 深入了解 Lazy-load 的背後實作 - Intersection Observer API

讓 Jest 幫你的 code 做測試

讓 Jest 幫你的 code 做測試

一起讀 Knowledge-Enabled Robotic Agents for Shelf Replenishment in Cluttered Retail Environments

一起讀 Knowledge-Enabled Robotic Agents for Shelf Replenishment in Cluttered Retail Environments

#01 Go 語言 環境變數 

#01 Go 語言 環境變數 

Robot Framework之RIDE介面

Robot Framework之RIDE介面

Python 101 快速入門教學

Python 101 快速入門教學



Comments