正則表達(dá)式(一) —— 簡介以及常用的正則表達(dá)式(一)

版本記錄

版本號 時間
V1.0 2022.02.16 星期三

前言

正則表達(dá)式主要就是進(jìn)行文本相關(guān)的處理“绫蹋可以快速的進(jìn)行查找和替換等白华。需要編程寫判斷幾十行代碼的操作,用正則表達(dá)式只要一句話椭豫。正則的靈活性耻瑟、邏輯性和功能性非常的強,可以迅速地用極簡單的方式達(dá)到字符串的復(fù)雜判斷和處理赏酥。不好的地方就是對于剛接觸的人來說喳整,比較晦澀和難懂。我們就一起來學(xué)習(xí)下裸扶。

簡介

大部分內(nèi)容來自菜鳥教程正則表達(dá)式框都。

正則表達(dá)式主要就是進(jìn)行文本相關(guān)的處理『浅浚可以快速的進(jìn)行查找和替換等魏保。需要編程寫判斷幾十行代碼的操作,用正則表達(dá)式只要一句話摸屠。正則的靈活性谓罗、邏輯性和功能性非常的強,可以迅速地用極簡單的方式達(dá)到字符串的復(fù)雜判斷和處理季二。不好的地方就是對于剛接觸的人來說檩咱,比較晦澀和難懂揭措。

下面看個簡單示例

使用?*通配符來查找硬盤上的文件。?通配符匹配文件名中的 0 個或 1 個字符刻蚯,而*通配符匹配0個或多個字符绊含。像data(\w)?\.dat這樣的模式將查找下列文件:

data.dat
data1.dat
data2.dat
datax.dat
dataN.dat

使用 * 字符代替 ? 字符擴(kuò)大了找到的文件的數(shù)量。data.*\.dat 匹配下列所有文件:

data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
  • ^ 為匹配輸入字符串的開始位置炊汹。

  • [0-9]+匹配多個數(shù)字躬充, [0-9] 匹配單個數(shù)字,+ 匹配個或者個兵扬。

  • abc$匹配字母 abc 并以 abc 結(jié)尾麻裳,$ 為匹配輸入字符串的結(jié)束位置。

只允許用戶名包含字符器钟、數(shù)字津坑、下劃線和連接字符(-),并設(shè)置用戶名的長度傲霸,我們就可以使用以下正則表達(dá)式來設(shè)定疆瑰。


為什么使用正則表達(dá)式

典型的搜索和替換操作要求您提供與預(yù)期的搜索結(jié)果匹配的確切文本。雖然這種技術(shù)對于對靜態(tài)文本執(zhí)行簡單搜索和替換任務(wù)可能已經(jīng)足夠了昙啄,但它缺乏靈活性穆役,若采用這種方法搜索動態(tài)文本,即使不是不可能梳凛,至少也會變得很困難耿币。

通過使用正則表達(dá)式,可以:

  • 測試字符串內(nèi)的模式韧拒。
    例如淹接,可以測試輸入字符串,以查看字符串內(nèi)是否出現(xiàn)電話號碼模式或信用卡號碼模式叛溢。這稱為數(shù)據(jù)驗證塑悼。
  • 替換文本。
    可以使用正則表達(dá)式來識別文檔中的特定文本楷掉,完全刪除該文本或者用其他文本替換它厢蒜。
  • 基于模式匹配從字符串中提取子字符串。
    可以查找文檔內(nèi)或輸入域內(nèi)特定的文本烹植。

例如斑鸦,您可能需要搜索整個網(wǎng)站,刪除過時的材料草雕,以及替換某些 HTML 格式標(biāo)記鄙才。在這種情況下,可以使用正則表達(dá)式來確定在每個文件中是否出現(xiàn)該材料或該 HTML 格式標(biāo)記促绵。此過程將受影響的文件列表縮小到包含需要刪除或更改的材料的那些文件。然后可以使用正則表達(dá)式來刪除過時的材料。最后败晴,可以使用正則表達(dá)式來搜索和替換標(biāo)記浓冒。


應(yīng)用領(lǐng)域

正則表達(dá)式已經(jīng)在很多軟件中得到廣泛的應(yīng)用,包括*nix(Linux, Unix等)尖坤、HP 等操作系統(tǒng)稳懒,PHP、C#慢味、Java 等開發(fā)環(huán)境场梆,以及很多的應(yīng)用軟件中,都可以看到正則表達(dá)式的影子纯路。

1. C# 正則表達(dá)式

可以參考C# 正則表達(dá)式 這一章節(jié)或油。

2. Java 正則表達(dá)式

可以參考Java 正則表達(dá)式 這一章節(jié)

3. JavaScript 正則表達(dá)式

可以參考JavaScript RegExp 對象 這一章節(jié)

4. Python 正則表達(dá)式

可以參考Python 正則表達(dá)式

5. Ruby 正則表達(dá)式

可以參考Ruby 正則表達(dá)式

下圖是不同環(huán)境下的表達(dá)差異和適配。



常用的正則表達(dá)式

1. 校驗數(shù)字的表達(dá)式

數(shù)字:^[0-9]*$
n位的數(shù)字:^\d{n}$
至少n位的數(shù)字:^\d{n,}$
m-n位的數(shù)字:^\d{m,n}$
零和非零開頭的數(shù)字:^(0|[1-9][0-9]*)$
非零開頭的最多帶兩位小數(shù)的數(shù)字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$
帶1-2位小數(shù)的正數(shù)或負(fù)數(shù):^(\-)?\d+(\.\d{1,2})$
正數(shù)驰唬、負(fù)數(shù)顶岸、和小數(shù):^(\-|\+)?\d+(\.\d+)?$
有兩位小數(shù)的正實數(shù):^[0-9]+(\.[0-9]{2})?$
有1~3位小數(shù)的正實數(shù):^[0-9]+(\.[0-9]{1,3})?$
非零的正整數(shù):^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
非零的負(fù)整數(shù):^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
非負(fù)整數(shù):^\d+$ 或 ^[1-9]\d*|0$
非正整數(shù):^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
非負(fù)浮點數(shù):^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
非正浮點數(shù):^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
正浮點數(shù):^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
負(fù)浮點數(shù):^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮點數(shù):^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

2. 校驗字符的表達(dá)式

漢字:^[\u4e00-\u9fa5]{0,}$
英文和數(shù)字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
長度為3-20的所有字符:^.{3,20}$
由26個英文字母組成的字符串:^[A-Za-z]+$
由26個大寫英文字母組成的字符串:^[A-Z]+$
由26個小寫英文字母組成的字符串:^[a-z]+$
由數(shù)字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
由數(shù)字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$
中文叫编、英文辖佣、數(shù)字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$
中文、英文搓逾、數(shù)字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
可以輸入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
禁止輸入含有~的字符:[^~\x22]+

3. 特殊需求表達(dá)式

Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
手機(jī)號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
電話號碼("XXX-XXXXXXX"卷谈、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"霞篡、"XXX-XXXXXXXX"世蔗、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
國內(nèi)電話號碼(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
電話號碼正則表達(dá)式(支持手機(jī)號碼寇损,3-4位區(qū)號凸郑,7-8位直播號碼,1-4位分機(jī)號): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
身份證號(15位矛市、18位數(shù)字)芙沥,最后一位是校驗位,可能為數(shù)字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
帳號是否合法(字母開頭浊吏,允許5-16字節(jié)而昨,允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密碼(以字母開頭,長度在6~18之間找田,只能包含字母歌憨、數(shù)字和下劃線):^[a-zA-Z]\w{5,17}$
強密碼(必須包含大小寫字母和數(shù)字的組合,不能使用特殊字符墩衙,長度在 8-10 之間):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
強密碼(必須包含大小寫字母和數(shù)字的組合务嫡,可以使用特殊字符甲抖,長度在8-10之間):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
日期格式:^\d{4}-\d{1,2}-\d{1,2}
一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
錢的輸入格式:
  1) 有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
  2) 這表示任意一個不以0開頭的數(shù)字,但是,這也意味著一個字符"0"不通過,所以我們采用下面的形式:^(0|[1-9][0-9]*)$
  3) 一個0或者一個不以0開頭的數(shù)字.我們還可以允許開頭有一個負(fù)號:^(0|-?[1-9][0-9]*)$
  4) 這表示一個0或者一個可能為負(fù)的開頭不為0的數(shù)字.讓用戶以0開頭好了.把負(fù)號的也去掉,因為錢總不能是負(fù)的吧。下面我們要加的是說明可能的小數(shù)部分:^[0-9]+(.[0-9]+)?$
  5) 必須說明的是,小數(shù)點后面至少應(yīng)該有1位數(shù),所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的:^[0-9]+(.[0-9]{2})?$
  6) 這樣我們規(guī)定小數(shù)點后面必須有兩位,如果你認(rèn)為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$
  7) 這樣就允許用戶只寫一位小數(shù).下面我們該考慮數(shù)字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
1到3個數(shù)字,后面跟著任意個 逗號+3個數(shù)字,逗號成為可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
  8) 備注:這就是最終結(jié)果了,別忘了"+"可以用"*"替代如果你覺得空字符串也可以接受的話(奇怪,為什么?)最后,別忘了在用函數(shù)時去掉去掉那個反斜杠,一般的錯誤都在這里
xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
中文字符的正則表達(dá)式:[\u4e00-\u9fa5]
雙字節(jié)字符:[^\x00-\xff] (包括漢字在內(nèi)心铃,可以用來計算字符串的長度(一個雙字節(jié)字符長度計2准谚,ASCII字符計1))
空白行的正則表達(dá)式:\n\s*\r (可以用來刪除空白行)
HTML標(biāo)記的正則表達(dá)式:<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正則表達(dá)式:^\s*|\s*$或(^\s*)|(\s*$) (可以用來刪除行首行尾的空白字符(包括空格、制表符去扣、換頁符等等)柱衔,非常有用的表達(dá)式)
騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始)
中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼為6位數(shù)字)
IPv4地址:((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

學(xué)習(xí)參考資料

1. 正則表達(dá)式吧
2. 菜鳥教程正則表達(dá)式
3. 菜鳥正則表達(dá)式在線測試工具
4. 站長正則表達(dá)式在線測試工具
5. OSChina正則表達(dá)式在線測試工具

后記

本篇主要講述了正則的簡介以及常用的正則表達(dá)式,感興趣的給個贊或者關(guān)注~~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愉棱,一起剝皮案震驚了整個濱河市唆铐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奔滑,老刑警劉巖艾岂,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異档押,居然都是意外死亡澳盐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門令宿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叼耙,“玉大人,你說我怎么就攤上這事粒没∩竿瘢” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵癞松,是天一觀的道長爽撒。 經(jīng)常有香客問我,道長响蓉,這世上最難降的妖魔是什么硕勿? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮枫甲,結(jié)果婚禮上源武,老公的妹妹穿的比我還像新娘。我一直安慰自己想幻,他們只是感情好粱栖,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脏毯,像睡著了一般闹究。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上食店,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天渣淤,我揣著相機(jī)與錄音赏寇,去河邊找鬼。 笑死砂代,一個胖子當(dāng)著我的面吹牛蹋订,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刻伊,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼椒功!你這毒婦竟也來了捶箱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤动漾,失蹤者是張志新(化名)和其女友劉穎丁屎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旱眯,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡晨川,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了删豺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片共虑。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呀页,靈堂內(nèi)的尸體忽然破棺而出妈拌,到底是詐尸還是另有隱情,我是刑警寧澤蓬蝶,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布尘分,位于F島的核電站,受9級特大地震影響丸氛,放射性物質(zhì)發(fā)生泄漏培愁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一缓窜、第九天 我趴在偏房一處隱蔽的房頂上張望定续。 院中可真熱鬧,春花似錦雹洗、人聲如沸香罐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庇茫。三九已至,卻和暖如春螃成,著一層夾襖步出監(jiān)牢的瞬間旦签,已是汗流浹背查坪。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留宁炫,地道東北人偿曙。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像羔巢,于是被迫代替她去往敵國和親望忆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容