PHP中的正則表達式

前言

最近在看基礎相關的東西,發現之前可以寫出來的正則表達式,如今寫不出來了,好比千分位格式化輸出金額,用正則表達式寫不出來,也只能用php提供number_format函數來解決問題。索性把這塊的知識複習一下,從頭開始瞭解,我又怕忘得太快,因而乎記在這裏php

梳理正則表達式的知識點

其實學習正則表達式記住幾個知識點,而後就是刷題,好比匹配手機號、身份證號、郵箱等等,經過這些案例來學習正則表達式是最好的方法,記得太多的知識點反而寫不出來。廢話很少說,先了解下知識點html

元字符

下面列出來了一些經常使用的元字符,具體的元字符的用法這裏不在列出,瞭解就能夠了,能夠結合別人寫的正則表達式回頭來學習,這樣記住的要更深入一些正則表達式

限定符

限定符要結合元字符一塊兒使用,纔能有出奇制勝的功效,具體在文章後買列舉出經常使用的案例,看下它們是如何使用的sql

多選結構

多選機構在一些特定的場合下使用的比較多,好比匹配域名後綴(com|cn|hk|sg)函數

分組和引用

若是要重複一個字符呢,用小括號能夠製造這麼一個字符串。若是要想使用前面匹配到的結果可使用分組學習

貪婪和非貪婪

在使用重複的量詞(+,*,{m,n})會盡量多的匹配字符,若是咱們不想要貪婪模式,子但願在匹配成功的前提下使用更少的重複字符,可使用非貪婪模式3d

在匹配一些東西的時候,懶惰模式很是的有用,好比匹配標籤img中的src屬性值,就使用到了懶惰模式,規則就是這樣/<img[\s\S]*?src="([\s\S]+?)"[\s\S]*?>/code

模式匹配優先級

元字符在匹配的時候,是有優先級的,同級優先級從左至右,其餘狀況以下面所示,優先級遞減regexp

環視

這是正則表達式比較難理解的地方,這裏我想記錄着,用另一篇文章來說解一下,我要惡補一下知識,才能弄明白orm

特殊狀況

在正則表達式中若是要匹配$是比較特殊的,它們兩個都是元字符,在使用時必須轉義因此匹配$使用的規則爲\\\$

在PHP中正則表達式必須放在單雙號引號中,不能像JS那樣單獨出現,而\在單引號中是轉義字符,因此必須把規則中的\再次轉義,獲得\\\\\\$,也就是所匹配$須要使用6個\和一個$

在雙引號中$有特殊的含義,須要對其轉義後才能使用,獲得\\\\\\\$

總結一下,正則表達式和引號中的特殊字符都得轉義,爲了不特殊字符須要轉義,強烈建議使用單引號

案例

  • 匹配整數 /^-?\d+$/
  • 匹配正整數 /^[1-9]\d*$/
  • 匹配兩位小數 /^\d+\.\d{2}$/
  • 匹配11位的手機號 /^1\d{10}$/
  • 匹配身份證號 /^(?:\d{15}|\d{17}[\dxX])$/
  • 匹配郵箱帳號 /^[\w\-]+@(?:\w+\.)+\w+$/
  • 匹配IP地址 /^((25[0-5]|2[0-4]\d|[1-9]\d{0,2})\.){3}(25[0-5]|2[0-4]\d|[1-9]\d{0,2})$/
  • 匹配URL /^(?:https?:\/\/)?(?:[\w-]+\.)+[a-zA-Z]+$/
  • 匹配img標籤src屬性值 /<img[^>]+?src="([^"]+)"/
  • 匹配js標籤src屬性值 /<img[^>]+?src="([^"]+)"/
  • 匹配中文 /[\u4e00-\u9fa5]+/u

總結

正則表達式的學習要結合案例,單純的學習正則規則是沒有用的,經過幾個案例來學習,怎麼使用,遇到的問題,這樣的學習要高效不少,並且很是的實用

下面的文章我將學習正則表達式中的環視,一塊兒期待

參考資料

learnku.com/articles/29…

www.cnblogs.com/tsql/p/5860…

www.zjmainstay.cn/my-regexp

deerchao.cn/tutorials/r…

相關文章
相關標籤/搜索