正則簡單介紹
什麼是正則呢? 正則是一種文本處理的庫。它是按照必定的規則處理字符串,獲得咱們想要的結果。現代社會很大一部分信息是以文本形式呈現的,掌握正則,你能玩轉文本的世界,大有可爲。 正則的本質: 按照必定規則處理文本的類庫,其實咱們也能夠用你熟悉的語言去重寫制定規則,寫一個文本處理的類庫。 正則類庫 經常使用的正則庫有pcre,posix等等。學會使用一種庫,明白他的思想,你很容易學習另一種庫,他們語法差異不是太大。咱們這裏以preg爲例, 正則是一種規則,遵循規則作事就能獲得你想要的。 正則的學習 合適的學習工具讓你事半功百: 推薦RegexTest 學習正則前得有一個觀念: 正則的規則能夠標識一切的文本。 正則的基礎元字符: 基本字符 除換行符外的任意字符 \w 字母數字下劃線或漢字 \s 空白符 \d 匹配數字 \b 開始或者結束 ^ 字符串開始 $ 字符串結束 量詞 -範圍 [] 括號中的任意字符 + 1個以上 * 任意個數的 ? 有或者沒有 {m} m個 {m,n}m到n個 {m,}m以上個 量詞表示數量java
基本字符能夠表示單個的全部的字符串。 咱們能夠說說字符串的組成,好比java這個字符串就是由四個字符 j a v a組成的 最直接的表示java 直接這麼寫就行。看到沒這樣就行 咱們能夠用基本字符表示爲:\w\w\w\w 若是使用量詞,\w+ 更清晰的表示\w{4}正則表達式
元字符加上量詞你就能描述全部的字符串啦。工具
咱們再進一步。若是要從字符串中找到 javajavejevejavejbvbjsvs 中找到jave,java,jeve這三個字符串呢? 能夠用到方括號了:j[ae]v[ae]學習
你能夠選擇方括號裏面的任意一個字符串。 若是不想匹配java,只想匹配其餘的相似的字符串:j[^a]v[aebs]測試
^標識否認的 例如數字爲[\d] 非數字[^\d]code
若是說[]標識或那麼()表示且了,()別名叫分組 好比咱們要找到j後面緊跟ave三個單詞的字符j(ave)ci
特殊的狀況加入字符串javajave[jevejave 含有[這個字符串咱們應該如何表示呢? 沒錯這個時候就必須用上轉義符號\,好比[在正則裏面表示爲[了。文檔
量詞裏面又會分爲貪婪,懶惰模式 *? +? ?? {n,m}? {n}?加上一個問號就成了懶惰模式,儘可能少的匹配 javajavejevejavejbvbjsvs 好比 jav.下是整個串 jav.?加上問號後是javajavejevejave字符串
掌握了上述的語法你就可以熟練的使用正則啦。 什麼郵箱驗證,什麼電話號碼驗證,什麼其餘的都是浮雲啦。基礎
更進一步更多的規則 捕獲 測試字符串:javajavejavajevejavejbvbjsvs (exp)一個括號表明一個分組,捕獲文本到分組裏面 正則(java)(.)(java) 都在分組裏面 (?<name>exp) 捕獲的分組名稱爲<>裏面的字符串 (java)(?<ssss>.)(java) 給分組命名爲ssss (?:exp)不捕獲分組 (java)(?:.*)(java)再也不捕獲分組
反向引用 好比我要匹配javajavejavajevejavejbvbjsvs java與java中間的字符串 你能夠java(.)java 你也能夠(java)(.)\1 匹配第一個分組匹配到的文檔 \n標識第n個分組
零寬斷言 i'm sing while you're dancing (?=exp) 匹配exp前面的部分 以ing結尾的字符 \b\w+(?=ing\b) (?<=exp)exp匹配exp後面的位置 以s開頭的字符(?<=s)\w+\b (?!exp) 匹配後面不能匹配exp的 \b((?!ing)\w)+\b (?<!exp)匹配前面不能匹配exp的 \b((?!you)\w)+\b
掌握上邊一些特性依舊掌握了正則的百分之八十了。
此外還有正則表達式的經常使用模式了。 i 忽略大小寫 m 多行匹配 s 點號通配模式 U 懶惰模式 D結尾限制模式 u 支持UTF-8轉義表達