一文帶你看懂百分之八十以上的正規表示式(入門級)

2021-09-28 17:51:55 字數 2121 閱讀 6546

本文文字較多,請大家耐心閱讀。我保證,只要是從頭到尾認真閱讀完畢的,基本上百分之八十以上的正規表示式都可以看明白,至於速度,就在於你平常練習的水平了。

正規表示式用途

1.寫爬蟲的時候對於網頁內容的匹配

2.提取資料和替換資料

3.進行資料驗證,比如某一字串驗證是否為手機號

基本上以上三種用途比較多。我學習它的原因就是為之後寫爬蟲打下基礎。

正規表示式基礎

再補充一點,?與等價 ,*與等價,+與等價 括號裡面右邊不寫數字的話代表可以無限多。

上面基本上就是經常用到的特殊字元了,如果在後面的例子**現別的字元,再進行介紹。

正規表示式例子五講

匹配數字

目標匹配:0、0123、2343534

^[0-9]*$
這個規則可以匹配任何數字。

^ 和$ 作為開始和結尾,[0-9] 表示字元集合 範圍是0-9,當然也可以寫成

[0|1|2|3|4|5|6|7|8|9] 這兩種形式是等價的 | 表示一種或的關係。*表示0或者很多 也就是對於前面的字元範圍集合[0-9],可以進行0次或多次匹配。 這個規則我可以匹配到 0、01、1234、234145

匹配位數限制的數字

目標匹配:000、12、2345

2-4位的數字:^\d$
上述可以匹配 位數在2-4位之間的數字,包括2和4.

\d 表示數字字元 相當於[0-9]

{} 具有限制作用 表示前面表示式所匹配的2-4個字元

舉一反三 :

匹配具有3-5個小寫字母的字元 如何寫呢?

^\w$ 或者

^[a-z]$

第一種方法能夠匹配aaa 單同時也能夠匹配000 不夠嚴謹

第二種方法更加嚴謹一些。

貪婪和非貪婪字元的匹配

目標匹配:looo 和lo

輸入 looo

lo+  等效與 ^lo+$  結果為  looo

lo+?等效與^lo+? 結果為lo

首先解釋一下^ 和$對於表示式的具體作用。

^ 表示輸入字串開始的位置,也就是當我輸入looo時,^表示第乙個輸入l的位置。

對於 $相似,表示輸入字串結束的位置,也就是looo的第三個o的位置。

加入這兩個相當於就是指定了位置,不可以自由的從中間開始進行匹配

舉個例子:

o+ 可以從looo 匹配到ooo

但是^o+ 就匹配不成功 原因是第乙個字元是l,加入 ^必須從第乙個字元開始。

同樣的 o+? $ 只能匹配到000,而o+? 可以匹配到o ,原因是 $ 限制了字串結尾的位置。

再解釋一下?在這個例子中的作用。

這個例子中 ?的作用是使其前面表示式變得非貪婪。就是我能讓你匹配到乙個就不讓你匹配到兩個。正如上述例子中o+ 匹配為ooo 而 o+? 只能匹配到 o。

負值字元

目標匹配:s、c、l

輸入:school

[scl]  結果輸出 s、c、l

[^ho] 結果輸出s、c、l

這裡的^的作用與前面咱們說到的定位符的作用不一樣,在這裡,你可以把它理解為 非。 也就是除了ho 其他字元都可以進行匹配。

介紹兩種特殊的模型

目標匹配:wall、well

輸入:wall、well

w(?:all|ell) 等價與 wall|well  輸出結果同上

w(?=all) 輸出為 w 而這個w是wall的w 不是well的w

?:叫做非獲取匹配,意思就是 括號裡不進行資料儲存,只是作為前面w字元後的乙個匹配規則 ,整體輸出為w加上裡面匹配規則所匹配的字元。

?= 叫做正向肯定偵察 ,同時也是乙個非獲取匹配,但是輸出與上面不一樣,只是輸出前面的w,括號裡面只是作為前面w字元所在位置和哪個字元的規則。

當然還有反向肯定 反向否定 等等 具體可以檢視菜鳥教程裡面詳細的介紹

菜鳥教程位址

如果有更好的例子,我也會及時更新上去。

H 遇到百分之百的女孩

火車要開了,女孩一直目送那個男孩的離開,一步,兩步,直到男孩踏上車都沒有回過頭看女孩一眼。火車開了,女孩淚如雨下 我一直在等他回頭,只要一眼,我就跟隨他去。車上,男孩看著急速倒退的風景心口隱隱作痛 為什麼你不叫我一聲,只要一聲,我就為你留下 現在時光老人走在你的面前,對你說,如果你能回答我乙個問題,...

軟體專案開發中的百分之九十效應

在軟體專案管理中,經常遇到這樣的情況 進度到百分之九十後開始停滯,要花很長很長時間很大很大代價 甚至超過前百分之九十所花費的工時 工期 才能完成最後的百分之十。我把這種情況叫作 軟體專案的百分之九十效應。西漢 劉向 戰國策 秦策五 詩云 行百里者半九十。此言末路之難也。通俗地講,做事情越接近成功越難...

mysql查詢前百分之幾的資料(以25 為例)

因為mysql沒有top的用法,而且limit後也不支援子查詢所以實現相對麻煩,可以使用類似於oracle中偽列的用法 select rownum rownum 1 student.from select rownum 0 row,student 可以看到表中有5條數資料 補充一下這裡的rownum...