正規表示式是我們驗證是經常見到的!下面我和大家一起分享如何更簡單的理解正規表示式。
首先,說一下正規名字的命名:
這個字我想大家都會眼熟吧! 「Regular Expression」。 Regular Expression的「Regular」一般被翻譯為「正規」、「正規」、「常規」。這裡的「Regular」是「規則」、「規律」的意思,Regular Expression即「描述某種規則的表達式」之意,也就是我們所說的正規表示式。其實正規表示式說白了就是用來規範某種行為的!或者說是一種約束,就好比我們必須遵守交通規則是的。
我個人感覺如果想把正則搞懂、搞懂也不難!只要把其中的一些必須記住的東西外,再加上靈活的運用,這樣就可以了!
好的!接下來我就來深入到正規的主體,
我們來先看看正規關鍵的東西,如果把這些東西都搞懂了!一般在專案中就沒有問題了!
第一個「\」
這個是俗稱轉義字符,就是把一個字符標記為一個特殊字符或原義字符。如:「n」 就是要配對「n」 。如果是「\n」 則是換行符號。
有人該問如果我就是想寫「\」這個斜線呢?這個也很簡單啊!就直接是這樣寫「\\」就可以了!為什麼要寫兩個「\\」呢!就是為了區分。
第二個「^」
這個是俗稱開始字符,就是說準備寫正則了!如果設定了RegExp物件的Multiline屬性,^也符合「\n」或「\r」之後的位置。
第三個「$」
這個是俗稱結束字符,也可以說成收尾(很不專業的解釋)!如果設定了RegExp物件的Multiline屬性,$也符合「\n」或「\r」之前的位置
第四個「*」
這個是符合前面的子表達式零次或多次。如:zo*能匹配“z”以及“zo”或“zoo”。這個「*」也就是相當於{0,}
第五個「 」
這個是符合前面的子表達式一次或多次。如:「zo 」能匹配「zo」以及「zoo」或「zooo」。這個「*」和「 」差不多一個是開始零次一個是一次。這個「 」相當於{1,}。
第六個「?」
這個是符合前面的子運算式零次或一次。如:「do(es)?」可以符合「do」或「does」。這個問號的意思就是要嘛配對零次要嘛匹配一次!
第七個「{}」
這個符號是配對多少次的,
1,{n}匹配確定的n次,n是一個非負整數,如:「o{2}」這個的意思就是配對兩個「oo」, 如: good,food等!不過不能匹配body,因為就一個o!
2,{n,}匹配至少n次,n是個非負整數,如:“o{2,}” 這個的意思是匹配兩個以上的“oo”,如:good,goood,gooood等。 「o{1,}」等價於「o 」。 「o{0,}」這個等價於「o*」。
3,{n,m}這個是最少匹配n次最多匹配m次,n和m都是非負整數,其中n
第八個「?」特殊用法
當字元緊接在任何其他限制符(*, ,?,{n},{n, },{n,m})後面時,配對模式是非貪婪的。所謂非貪婪就是以最少為好,非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對於字串“oooo”,“o ?”將符合單一“o”,而“o ”將符合所有“o”。
第九個「.」
符合除換行符「\n」之外的任何單一字元。如果想要匹配換行符「\n」再內的任何字符,就使用「(.|\n)」的模式。
第十個「pattern」
這個「pattern」不是很好理解,剛一看比較暈!不過我對這個的理解如下希望對大家有用:
1. ?:pattern 匹配pattern但不獲取匹配結果, 例如:k(?:1|2|3) k在123中任意匹配一個,例子: k1|k2
2. ?=pattern 正向肯定預查例如:K(?=1|2|3) 當K符合123任一時選擇K 例:k1中的k或k2中的k
3. ?!pattern 正向否定預查例如:k(?!1|2|3) 當K不匹配123中的任一個時選擇K 例子:不匹配k1中的k,不過可以是k4, k5
4. ?5. ?
第十一個「|」
這個符號就是或的意思,例如:「f|good」能匹配「f」或「好」,如果這樣呢「(f| g)ood」則符合「food」或「good」。
第十二個「[]」
這個符號是字元集和的意思,和「{}」看起來差不多,不過意義可就差多了。
第十三個「()」
這個符號式陣列或是集合
1、[xyz] 匹配所包含的任一個字元。是說三個之中選擇一個。例:「[abc]」可以符合「company」中的「a」不過不可以符合「beautiful」因為用到了裡面的兩個字母。
2、[^xyz] 這個是負值字元集合,也可以說成是「非」。例:「[^abc]」可以匹配「drop」等!只要單字裡沒有「abc」這三個字母就可以。
3、[a-z] 字元的範圍。符合指定範圍內的任意字元。例如,「[a-z]」可以符合「a」到「z」範圍內的任意小寫字母字元。也可以寫成“[0-9]”這個是匹配0到9直接打數字。
4、[^a-z] 這個我想不用說大家就應該想到是什麼意思了,對了!就是你想的那個意思:不在“a”到“z”範圍內的任意字符,一開始我看到這個的時候以為是不在a到z之間的字母!我說如果不在a到z之間的字母那隻有漢語中的“ü” 了!這個好像讀「喻」!呵呵!大家看清楚了啊!是字符,不是字母。
下面大家和我一起看看「\」和字母所匹配的特殊意義,
「\b」 這個是匹配一個單字的邊界,也就是指單字和空格間的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。這個我覺得比較好記大家可以這樣記:邊界的邊是b開頭的!
“\B”這個是和“\b”是相反的,匹配非單字邊界。 “er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
「\d」這個是用的比較多!我建議大家對這個多記記,這個是匹配數字字符,相當於[0-9]。
「\D」這個也很好理解,也是相反的意思就是說不是數字的,相當於[^0-9]。
“\f”這個是符合一個換頁符號。這個不做過多解釋了!下面的四個也就太多不做太多解釋了。只要記住就可以了!在專案中會用就可以了!
“\n”這個是符合一個換行符號。
“\r”這個是符合一個回車符。
“\t”這個是符合一個製表符。
“\v”這個是符合一個垂直製表符。
“\s”這個匹配任何空字符,匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。也就是這個把上面的五個都包括在內了!
“\S”這個是非空白字元等價於[^ \f\n\r\t\v]。
說到這裡大家都可能感覺到正規其實就是這些字元嘛!而且有些是可以靠我們的邏輯思考推理出來的,而且有些是重複的,只要大家能夠靈活的運用就可以了。
“\w”這個是匹配包括下劃線的任何單字字元。等價於「[A-Za-z0-9_]」。這個實際用的也挺多的也建議大家多記記這個。
“\W”這個是匹配非單字數字字元。等價於「[^A-Za-z0-9_]」。
好的!基本上要記得就是這麼多了!這些可能有些正則高手該說了「你這個根本不全啊?」 我先提前解釋一下吧,我所寫的只是一些基礎的,在項目中常見的,比較實用的,基本上這些在項目中就可以運用自如了。
接下來呢,跟大家做一些實質的東西,跟大家一起解析一些正規表示式。
例如這個正規:^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0 -9])$
這個正規我想對正規高手來說一看就知道是什麼了。當然一些邏輯思維比較強的看兩眼也就知道這個是什麼了,沒錯就是時間正則。
OK 我們來解析這個正規從這個「^」開始,「([0-1]?[0-9]|2[0-3])」是個組,「[0-1 ]?」這個問號的作用是0或1最多有零個或一個,「[0-9]」0至9之間任一個數,「|」這個是「或」的意思,就是說不是「[ 0-1]?[0-9]”就是“2[0-3]”,“2[0-3]” 這個是前面的2就是代表2,後面0至3是0到3之間任一個數,「:」就是代表「:」,「([0-5][0-9])」也是個組,「[0-5]」是0到5之間任一個數,「[0- 9]」是0到9之間任一個數,「:」也是本意,「([0-5][0-9])」也是個組,「[0-5]」是0到5之間任一個數,「[0-9]」是0到9之間任一個數,「$」這個是結束符。
再跟大家解析一個小數
例如:^[1-9] \d*(\.[0-9]{1,2})?|0(\.[0-9]{1,2})?$
「^」是開始符,「[1-9] 」其中「 」的意思是1到9之間最少有一個或多個,「\d*」這個「\d」是數字,這個「*」是最少有零個數字或多個數字,「(\.[0-9]{1,2})?」這組裡面「\.」是原意點,「[0-9]{1,2} 」 0到9之間有一個或有兩個數字,後面這個問號「?」意思是有零個或一個它「(\.[0-9]{1,2})」。 「|」 是「[1-9] \d*(\.[0-9]{1,2})?」或是「0(\.[0-9]{1,2})? 」。 「0(\.[0-9]{1,2})?」這裡面的0是原意,「(\.[0-9]{1,2})?」這組裡面「\.」是原意點,「[0-9]{1,2}」 0到9之間有一個或有兩個數字,後面這個問號「?」意思是有零個或一個它「(\.[0-9 ]{1,2})」。
下面我例舉出一些常見的正規表示式來給大家說說:
^[1-9]\d*$ //匹配正整數
^-[ 1-9]\d*$ //匹配負整數
^-?[1-9]\d*$ //匹配整數
^[1-9]\d*|0$ //匹配非負整數(正整數0)
^-[1-9]\d*|0$ //匹配非正整數(負整數0)
^[1-9]\d*\.\ d*|0\.\d*[1-9]\d*$ //符合正浮點數
^-([1-9]\d*\.\d*|0\.\d* [1-9]\d*)$ //符合負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d *|0?\.0 |0)$ //符合浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0 ?\.0 |0$ //符合非負浮點數(正浮點數0)
^(-([1-9]\d*\.\d*|0\.\d*[1- 9]\d*))|0?\.0 |0$ //匹配非正浮點數(負浮點數0)
^[a-zA-Z][a-zA-Z0-9_]{ 4,15}$ //符合帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線)
^\s*|\s*$ //匹配首尾空白字元的正規表示式
\n\s*\r //符合空白行的正規表示式
[^\x00-\xff] //符合雙位元組字元(包括漢字在內)
[\u4e00-\ u9fa5] //符合中文字元的正規表示式
使用者名稱
^[a-z0-9_-]{3,16}$
密碼
^[a -z0-9_-]{6,18}$
十六進位值
^#?([a-f0-9]{6}|[a-f0-9]{3 })$
電子郵件
^([a-z0-9_\.-] )@([\da-z\.-] )\.([a-z\.]{2, 6})$
^[a-z\d] (\.[a-z\d] )*@([\da-z](-[\da-z])?) (\.{1,2} [a-z] ) $
URL
^(https?:\/\/)?([\da-z\.-] )\.([a-z\.]{2,6} )([\/\w \.-]*)*\/?$
IP 位址
((2[0-4]\d|25[0-5]|[01] ?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
或
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(? :25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
HTML 標籤
^< ;([a-z] )([^(.*)|\s \/>)$
以上便是關於正則表達式的一些基礎知識配合實際例子的講解,希望可以幫助到對正規表示式感到迷惑的同學,如有錯誤請指出。
更多相關問題請造訪PHP中文網:PHP影片教學
以上是正規表示式詳細基礎實例解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

在PHP中,trait適用於需要方法復用但不適合使用繼承的情況。 1)trait允許在類中復用方法,避免多重繼承複雜性。 2)使用trait時需注意方法衝突,可通過insteadof和as關鍵字解決。 3)應避免過度使用trait,保持其單一職責,以優化性能和提高代碼可維護性。

依賴注入容器(DIC)是一種管理和提供對象依賴關係的工具,用於PHP項目中。 DIC的主要好處包括:1.解耦,使組件獨立,代碼易維護和測試;2.靈活性,易替換或修改依賴關係;3.可測試性,方便注入mock對象進行單元測試。

SplFixedArray在PHP中是一種固定大小的數組,適用於需要高性能和低內存使用量的場景。 1)它在創建時需指定大小,避免動態調整帶來的開銷。 2)基於C語言數組,直接操作內存,訪問速度快。 3)適合大規模數據處理和內存敏感環境,但需謹慎使用,因其大小固定。

PHP通過$\_FILES變量處理文件上傳,確保安全性的方法包括:1.檢查上傳錯誤,2.驗證文件類型和大小,3.防止文件覆蓋,4.移動文件到永久存儲位置。

JavaScript中處理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。 1.??返回第一個非null或非undefined的操作數。 2.??=將變量賦值為右操作數的值,但前提是該變量為null或undefined。這些操作符簡化了代碼邏輯,提高了可讀性和性能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器