正則修煉手冊:從零開始學正則表達式

2020-12-19 知足常足生活圈

正則修煉手冊

從零開始學正則表達式

從零開始學正則表達式

正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機編程科學中的一個概念。

正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

正則表達式通用於主流程式語言,應用廣泛,是新手小白程式設計師晉級的必過門檻。

為何需要正則表達式?

正則表達式旨在批量解決對應問題,使程序發揮其工作效率。

給定一個正則表達式和另一個字符串,我們可以達到如下的目的:

1. 給定的字符串是否符合正則表達式的過濾邏輯(稱作「匹配」)。

2. 可以通過正則表達式,從字符串中獲取我們想要的特定部分。

正則應用圖

正則表達式 - 前世今生

鼻祖

美國新澤西州的Warren McCulloch和出生在美國底特律的Walter Pitts這兩位神經生理方面的科學家,研究出了一種用數學方式來描述神經網絡的新方法,他們創造性地將神經系統中的神經元描述成了小而簡單的自動控制元,從而作出了一項偉大的工作革新。

1951 年,一位名叫Stephen Kleene的數學科學家,他在Warren McCulloch和Walter Pitts早期工作的基礎之上,發表了一篇題目是《神經網事件的表示法》的論文,利用稱之為正則集合的數學符號來描述此模型,引入了正則表達式的概念。

後來,人們發現可以將這一工作成果應用於其他方面。Ken Thompson就把這一成果應用於計算搜索算法的一些早期研究,Ken Thompson是 Unix的主要發明人,也就是大名鼎鼎的Unix之父。Unix之父將此符號系統引入編輯器QED,然後是Unix上的編輯器ed,並最終引入grep。

從此,正則表達式被廣泛應用開來。

近年來,正則表達式逐漸從模糊而深奧的數學概念,發展成為在計算機各類工具和軟體包應用中的主要功能。不僅僅眾多UNIX工具支持正則表達式,近二十年來,在WINDOWS的陣營下,正則表達式的思想和應用在大部分 Windows 開發者工具包中得到支持和嵌入應用!從正則式在Microsoft Visual Basic 6 或 Microsoft VBScript到.NET Framework中的探索和發展,WINDOWS系列產品對正則表達式的支持發展到無與倫比的高度,幾乎所有 Microsoft 開發者和所有.NET語言都可以使用正則表達式。如果你是一位接觸計算機語言的工作者,那麼你會在主流作業系統(*nix[Linux, Unix等]、Windows、HP、BeOS等)、主流的開發語言(delphi、Scala、PHP、C#、Java、C++、Objective-c、Swift、VB、Javascript、Ruby以及Python等)、數以億萬計的各種應用軟體中,都可以看到正則表達式優美的舞姿。

正則表達式 - 主要符號一覽

正則表達式元字符圖

元字符(基礎)

描述

\

將下一個字符標記符、或一個向後引用、或一個八進位轉義符。例如,「\\n」匹配\n。「\n」匹配換行符。序列「\\」匹配「\」而「\(」則匹配「(」。即相當於多種程式語言中都有的「轉義字符」的概念。

^

匹配輸入字行首。如果設置了RegExp對象的Multiline屬性,^也匹配「\n」或「\r」之後的位置。

$

匹配輸入行尾。如果設置了RegExp對象的Multiline屬性,$也匹配「\n」或「\r」之前的位置。

*

匹配前面的子表達式任意次。例如,zo*能匹配「z」,也能匹配「zo」以及「zoo」。*等價於o{0,}

+

匹配前面的子表達式一次或多次(大於等於1次)。例如,「zo+」能匹配「zo」以及「zoo」,但不能匹配「z」。+等價於{1,}。

?

匹配前面的子表達式零次或一次。例如,「do(es)?」可以匹配「do」或「does」中的「do」。?等價於{0,1}。

{n}

n是一個非負整數。匹配確定的n次。例如,「o{2}」不能匹配「Bob」中的「o」,但是能匹配「food」中的兩個o。

{n,}

n是一個非負整數。至少匹配n次。例如,「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的所有o。「o{1,}」等價於「o+」。「o{0,}」則等價於「o*」。

{n,m}

m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}」將匹配「fooooood」中的前三個o為一組,後三個o為一組。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。

?

當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘可能少的匹配所搜索的字符串,而默認的貪婪模式則儘可能多的匹配所搜索的字符串。例如,對於字符串「oooo」,「o+」將儘可能多的匹配「o」,得到結果[「oooo」],而「o+?」將儘可能少的匹配「o」,得到結果 ['o', 'o', 'o', 'o']

.點

匹配除「\n」之外的任何單個字符。要匹配包括「\n」在內的任何字符,請使用像「[\s\S]」的模式。

(pattern)

匹配pattern並獲取這一匹配。所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號字符,請使用「\(」或「\)」。

(?:pattern)

非獲取匹配,匹配pattern但不獲取匹配結果,不進行存儲供以後使用。這在使用或字符「(|)」來組合一個模式的各個部分時很有用。例如「industr(?:y|ies)」就是一個比「industry|industries」更簡略的表達式。

(?=pattern)

非獲取匹配,正向肯定預查,在任何匹配pattern的字符串開始處匹配查找字符串,該匹配不需要獲取供以後使用。例如,「Windows(?=95|98|NT|2000)」能匹配「Windows2000」中的「Windows」,但不能匹配「Windows3.1」中的「Windows」。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始。

(?!pattern)

非獲取匹配,正向否定預查,在任何不匹配pattern的字符串開始處匹配查找字符串,該匹配不需要獲取供以後使用。例如「Windows(?!95|98|NT|2000)」能匹配「Windows3.1」中的「Windows」,但不能匹配「Windows2000」中的「Windows」。

(?<=pattern)

非獲取匹配,反向肯定預查,與正向肯定預查類似,只是方向相反。例如,「(?<=95|98|NT|2000)Windows」能匹配「2000Windows」中的「Windows」,但不能匹配「3.1Windows」中的「Windows」。

(?<!pattern)

非獲取匹配,反向否定預查,與正向否定預查類似,只是方向相反。例如「(?<!95|98|NT|2000)Windows」能匹配「3.1Windows」中的「Windows」,但不能匹配「2000Windows」中的「Windows」。這個地方不正確,有問題

此處用或任意一項都不能超過2位,如「(?<!95|98|NT|20)Windows正確,「(?<!95|980|NT|20)Windows 報錯,若是單獨使用則無限制,如(?<!2000)Windows 正確匹配

x|y

匹配x或y。例如,「z|food」能匹配「z」或「food」(此處請謹慎)。「[zf]ood」則匹配「zood」或「food」。

[xyz]

字符集合。匹配所包含的任意一個字符。例如,「[abc]」可以匹配「plain」中的「a」。

[^xyz]

負值字符集合。匹配未包含的任意字符。例如,「[^abc]」可以匹配「plain」中的「plin」。

[a-z]

字符範圍。匹配指定範圍內的任意字符。例如,「[a-z]」可以匹配「a」到「z」範圍內的任意小寫字母字符。

注意:只有連字符在字符組內部時,並且出現在兩個字符之間時,才能表示字符的範圍; 如果出字符組的開頭,則只能表示連字符本身.

[^a-z]

負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,「[^a-z]」可以匹配任何不在「a」到「z」範圍內的任意字符。

\b

匹配一個單詞邊界,也就是指單詞和空格間的位置(即正則表達式的「匹配」有兩種概念,一種是匹配字符,一種是匹配位置,這裡的\b就是匹配位置的)。例如,「er\b」可以匹配「never」中的「er」,但不能匹配「verb」中的「er」。

\B

匹配非單詞邊界。「er\B」能匹配「verb」中的「er」,但不能匹配「never」中的「er」。

\cx

匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須為A-Z或a-z之一。否則,將c視為一個原義的「c」字符。

\d

匹配一個數字字符。等價於[0-9]。grep 要加上-P,perl正則支持

\D

匹配一個非數字字符。等價於[^0-9]。grep要加上-P,perl正則支持

\f

匹配一個換頁符。等價於\x0c和\cL。

\n

匹配一個換行符。等價於\x0a和\cJ。

\r

匹配一個回車符。等價於\x0d和\cM。

\s

匹配任何不可見字符,包括空格、制表符、換頁符等等。等價於[ \f\n\r\t\v]。

\S

匹配任何可見字符。等價於[^ \f\n\r\t\v]。

\t

匹配一個制表符。等價於\x09和\cI。

\v

匹配一個垂直制表符。等價於\x0b和\cK。

\w

匹配包括下劃線的任何單詞字符。類似但不等價於「[A-Za-z0-9_]」,這裡的"單詞"字符使用Unicode字符集。

\W

匹配任何非單詞字符。等價於「[^A-Za-z0-9_]」。

\xn

匹配n,其中n為十六進位轉義值。十六進位轉義值必須為確定的兩個數字長。例如,「\x41」匹配「A」。「\x041」則等價於「\x04&1」。正則表達式中可以使用ASCII編碼。

\num

匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如,「(.)\1」匹配兩個連續的相同字符。

\n

標識一個八進位轉義值或一個向後引用。如果\n之前至少n個獲取的子表達式,則n為向後引用。否則,如果n為八進位數字(0-7),則n為一個八進位轉義值。

\nm

標識一個八進位轉義值或一個向後引用。如果\nm之前至少有nm個獲得子表達式,則nm為向後引用。如果\nm之前至少有n個獲取,則n為一個後跟文字m的向後引用。如果前面的條件都不滿足,若n和m均為八進位數字(0-7),則\nm將匹配八進位轉義值nm。

\nml

如果n為八進位數字(0-7),且m和l均為八進位數字(0-7),則匹配八進位轉義值nml。

\un

匹配n,其中n是一個用四個十六進位數字表示的Unicode字符。例如,\u00A9匹配版權符號(&copy;)。

\p{P}

小寫 p 是 property 的意思,表示 Unicode 屬性,用於 Unicode 正表達式的前綴。中括號內的「P」表示Unicode 字符集七個字符屬性之一:標點字符。

其他六個屬性:

L:字母;

M:標記符號(一般不會單獨出現);

Z:分隔符(比如空格、換行等);

S:符號(比如數學符號、貨幣符號等);

N:數字(比如阿拉伯數字、羅馬數字等);

C:其他字符。

*註:此語法部分語言不支持,例:javascript。

\<

\>

匹配詞(word)的開始(\<)和結束(\>)。例如正則表達式\<the\>能夠匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:這個元字符不是所有的軟體都支持的。

( )將( 和 ) 之間的表達式定義為「組」(group),並且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多可以保存9個),它們可以用 \1 到\9 的符號來引用。

|將兩個匹配條件進行邏輯「或」(Or)運算。例如正則表達式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:這個元字符不是所有的軟體都支持的。

正則表示式 - 封裝實例

標準xml文件格式示例:

<?xml version="1.0" encoding="UTF-8"?>

<urlset>

<!--表示www.0460.com 下的一組pattern 或url對應關係-->

<url>

<loc>http://www.0460.com/ </loc>

<!-- 表示pc站點的網址首頁 -->

<data>

<display>

<pc_url_pattern>http://www.0460.com/view/(\d+).html</pc_url_pattern>

<!-- 表示該PC頁的url pattern-->

<xhtml_url_pattern >http://m.0460.com/view/${1}.html</xhtml_url_pattern>

<html5_url_pattern >http://m.0460.com/view/${1}.html</html5_url_pattern>

<!-- 一組PC pattern 可能含有多個版式的手機頁pattern,視自身情況提交 -->

</display>

</data>

</url>

<!-- 下一組pattern 放在一個新的url 節點內 -->

</urlset>

標準txt文件格式示例:

每行兩列數據,第一列為PC url pattern,第二列為對應Wap url pattern,兩列數據以tab鍵做分隔。

示例如下:

http://www.0460.com/web/(\d+)/(\d+)/ http://www.0460.com/web/${1}/${2}/

http://www.0460.com/web/(\w+).html http://m.0460.com/web/${1}.html

正則表達式 - 應用實例

1 . 校驗密碼強度

密碼的強度必須是包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間。

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

2. 校驗中文

字符串僅能是中文。

^[\\u4e00-\\u9fa5]{0,}$

3. 由數字、26個英文字母或下劃線組成的字符串

^\\w+$

4. 校驗E-Mail 地址

同密碼一樣,下面是E-mail地址合規性的正則檢查語句。

[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?

5. 校驗身份證號碼

下面是身份證號碼的正則校驗。15 或 18位。

15位:

^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$

18位:

^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$

6. 校驗日期

「yyyy-mm-dd「 格式的日期校驗,已考慮平閏年。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

7. 校驗金額

金額校驗,精確到2位小數。

^[0-9]+(.[0-9]{2})?$

8. 校驗手機號

下面是國內 13、15、18開頭的手機號正則表達式。(可根據目前國內收集號擴展前兩位開頭號碼)

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$

9. 判斷IE的版本

IE目前還沒被完全取代,很多頁面還是需要做版本兼容,下面是IE版本檢查的表達式。

^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$

10. 校驗IP-v4地址

IP4 正則語句。

\\b(?:(?: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]?)\\b

11. 校驗IP-v6地址

IP6 正則語句。

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

12. 檢查URL的前綴

應用開發中很多時候需要區分請求是HTTPS還是HTTP,通過下面的表達式可以取出一個url的前綴然後再邏輯判斷。

if (!s.match(/^[a-zA-Z]+:\\/\\//))

{

s = 'http://' + s;

}

13. 提取URL連結

下面的這個表達式可以篩選出一段文本中的URL。

^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?

14. 文件路徑及擴展名校驗

驗證windows下文件路徑和擴展名(下面的例子中為.txt文件)

^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?"<>|]+\\.txt(l)?$

15. 提取Color Hex Codes

有時需要抽取網頁中的顏色代碼,可以使用下面的表達式

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

16. 提取網頁圖片

假若你想提取網頁中所有圖片信息,可以利用下面的表達式。

\\< *[img][^\\\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*)

17. 提取頁面超連結

提取html中的超連結。

(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>

18. 查找CSS屬性

通過下面的表達式,可以搜索到相匹配的CSS屬性。

^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}

19. 抽取注釋

如果你需要移除HMTL中的注釋,可以使用如下的表達式。

<!--(.*?)-->

20. 匹配HTML標籤

通過下面的表達式可以匹配出HTML中的標籤屬性。

<\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:".*?"|'.*?'|[\\^'">\\s]+))?)+\\s*|\\s*)\\/?>

正則表達式 - 在程序語言中的應用示例(C#版)

using System;

using System.Text.RegularExpressions;

public class RegexTest

{

public static void RunTest()

{

int counter;

Match m;

CaptureCollection cc;

GroupCollection gc;

Regex r = new Regex("(Abc)+"); //查找"Abc"

m = r.Match("XYZAbcAbcAbcXYZAbcAb"); //設定要查找的字符串

gc = m.Groups;

//輸出查找組的數目

Console.WriteLine("Captured groups = " + gc.Count.ToString());

// Loop through each group.

for (int i=0; i < gc.Count; i++) //查找每一個組

{

cc = gc[i].Captures;

counter = cc.Count;

Console.WriteLine("Captures count = " + counter.ToString());

for (int ii = 0; ii < counter; ii++)

{

// Print capture and position.

Console.WriteLine(cc[ii] + " Starts at character " +

cc[ii].Index); //輸入捕獲位置

}

}

}

public static void Main() {

RunTest();

}

}

此例返回下面的輸出結果:

Captured groups = 2

Captures count = 1

AbcAbcAbc Starts at character 3

Captures count = 3

Abc Starts at character 3

Abc Starts at character 6

Abc Starts at character 9

附錄:正則表達式 - 驗證類應用合集

正則基礎圖

1.驗證用戶名和密碼:("^[a-zA-Z]\w{5,15}$")正確格式:"[A-Z][a-z]_[0-9]"組成,並且第一個字必須為字母6~16位;

2.驗證電話號碼:("^(\d{3,4}-)\d{7,8}$")正確格式:xxx/xxxx-xxxxxxx/xxxxxxxx;

3.驗證手機號碼:"^1[3|4|5|7|8][0-9]{9}$";

4.驗證身份證號(15位):"\d{14}[[0-9],0-9xX]",(18位):"\d{17}[[0-9],0-9xX]";

5.驗證Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");

6.只能輸入由數字和26個英文字母組成的字符串:("^[A-Za-z0-9]+$");

7.整數或者小數:^[0-9]+([.][0-9]+){0,1}$

8.只能輸入數字:"^[0-9]*$"。

9.只能輸入n位的數字:"^\d{n}$"。

10.只能輸入至少n位的數字:"^\d{n,}$"。

11.只能輸入m~n位的數字:"^\d{m,n}$"。

12.只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。

13.只能輸入有兩位小數的正實數:"^[0-9]+(\.[0-9]{2})?$"。

14.只能輸入有1~3位小數的正實數:"^[0-9]+(\.[0-9]{1,3})?$"。

15.只能輸入非零的正整數:"^\+?[1-9][0-9]*$"。

16.只能輸入非零的負整數:"^\-[1-9][0-9]*$"。

17.只能輸入長度為3的字符:"^.{3}$"。

18.只能輸入由26個英文字母組成的字符串:"^[A-Za-z]+$"。

19.只能輸入由26個大寫英文字母組成的字符串:"^[A-Z]+$"。

20.只能輸入由26個小寫英文字母組成的字符串:"^[a-z]+$"。

21.驗證是否含有^%&',;=?$\"等字符:"[%&',;=?$\\^]+"。

22.只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"。

23.驗證URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。

24.驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"10"~"12"。

25.驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"、"10"~"29"和「30」~「31」。

26.獲取日期正則表達式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日?

評註:可用來匹配大多數年月日信息。

27.匹配雙字節字符(包括漢字在內):[^\x00-\xff]

評註:可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

28.匹配空白行的正則表達式:\n\s*\r

評註:可以用來刪除空白行

29.匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?</>|<.*? />

評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的嵌套標記依舊無能為力

30.匹配首尾空白字符的正則表達式:^\s*|\s*$

評註:可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式

31.匹配網址URL的正則表達式:[a-zA-z]+://[^\s]*

評註:網上流傳的版本功能很有限,上面這個基本可以滿足需求

32.匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

評註:表單驗證時很實用

33.匹配騰訊QQ號:[1-9][0-9]{4,}

評註:騰訊QQ號從10 000 開始

34.匹配中國郵政編碼:[1-9]\\d{5}(?!\d)

評註:中國郵政編碼為6位數字

35.匹配ip地址:([1-9]{1,3}\.){3}[1-9]。

評註:提取ip地址時有用

36.匹配MAC地址:([A-Fa-f0-9]{2}\:){5}[A-Fa-f0-9]

即便某種語言強大如c哪天被淘汰了,正則表達式也不會被淘汰,收藏本篇,日後或用得著。

以上是基本的正則參考資料,具體應用,還需結合您遇到的情況活學活用,如果您在實踐中碰到正則方面的難題,可以在此留言,我將一一回復。

如果您覺得有用,請點讚,您的轉發與評論支持是我繼續寫下去的最大動力,感謝您,十年來,一路陪伴0460!

相關焦點

  • Python正則表達式:特殊符號和字符
    正表達式為高級的文本模式匹配,抽取,與/或文本形式的搜索和替換功能提供了基礎。簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。
  • JavaScript-正則表達式中的修飾符和對象有哪些?
    本節主要內容:1.什麼是正則表達式2.正則表達式進階3.正則表達式高級學習目標:一、正則表達式>(1)/frank/i是一個正則表達式(2)frank是這個正則表達式的主體,表示想要檢索的內容是frank(3)i 是一個正則表達式的修飾符,表示檢索內容時不區分大小寫1.3 正則表達式常見用法正則表達式在實際開發中一般不會單獨使用
  • JavaScript正則表達式「程式設計師培養之路第十二天」
    第一節 基本概念正則表達式(regular expression)描述了一種字符串匹配的模式,他是一個特殊的公式,由原子、元字符、模式修正符組成;它也是一個字符串!只不過是一個特殊的字符串主要實現對字符串的匹配、分割、查找、替換等操作 正則表達式的主要作用: 正則匹配: 可以測試字符串內容是否可以與正則相匹配 替換文本: 根據模式匹配字符串中的特定內容,進行替換、刪除 提取數據: 根據模式匹配從字符串中提取內容
  • linux - grep常用正則表達式,過濾文本內容
    正則表達式正則表達式就是一套處理大量的字符串而定義的規則和方法。通過正則表達式這些特殊字符號,可以快速的過濾、替換需要的內容。基礎正則表達式(Basic regular expression)1) ^ :例如 ^word 以word開頭的內容
  • 常用正則表達式語法大全 校驗匹配數字、任意字符、特殊需求
    以下小凡在開發中引入了一些最常用的正則表達式,包括檢查數字,字符,一些特殊要求等。需要能夠收集。}$  4 m-n位的數字:^d{m,n}$  5 零和非零開頭的數字:^(0|[1-9][0-9]*)$  6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?
  • Linux shell編程 17 grep和正則表達式
    使用正則表達式使模式匹配加入一些規則,因此可以在抽取信息中加入更多選擇。使用正則表達式時最好用單引號括起來,這樣可以防止 g r e p中使用的專有模式與一些 s h e l l命令的特殊方式相混淆。8.2.1 模式範圍假定要抽取代碼為4 8 4和4 8 3的城市位置,上一章中講到可以使用 [ ]來指定字符串範圍,這裡用4 8開始,以3或4結尾,這樣抽出4 8 4或4 8 3。8.2.2 不匹配行首如果要抽出記錄,使其行首不是 4 8,可以在方括號中使用 ^記號,表明查詢在行首開始。
  • 甜蜜暴擊正則大學是哪所學校在哪裡 深圳平安大學介紹
    甜蜜暴擊正則大學是哪所學校在哪裡 深圳平安大學介紹  《甜蜜暴擊》的預告中,明天來到了正則大學,那麼劇中的正則大學真實存在嗎?正則大學只是在劇中的名字,現實生活中,是在深圳的一所大學拍攝的,劇中明天和方宇在這裡開啟了不一樣的人生。
  • 甜蜜暴擊正則大學真實存在嗎 明天方宇在這裡開啟格鬥人生
    《甜蜜暴擊》的預告中,明天來到了正則大學,那麼劇中的正則大學真實存在嗎?正則大學只是在劇中的名字,現實生活中,是在深圳的一所大學拍攝的,劇中明天和方宇在這裡開啟了不一樣的人生。     據悉,電視劇甜蜜暴擊劇情介紹主要是在深圳拍攝的,劇中的正則體校選的是深圳的平安大學,該校是中國最早成立的企業大學之一,同時還被評為中國最美麗的企業大學,是中國國內三大企業學校之一。
  • 加藤清正福島正則對豐臣家忠心耿耿,關原合戰卻加入東軍!為啥
    德川家康的東軍對抗石田三成的西軍,有人因此認為,加藤清正和福島正則背叛了豐臣秀吉和豐臣家,事實真是如此嗎?不說加藤清正和福島正則所處的是以下克上盛行的日本戰國時代,就看關原合戰,我們就會發現,這2人談不上什麼豐臣家的叛徒,甚至可以說他們對豐臣秀吉和豐臣家忠心耿耿。這怎麼說呢?
  • 關原合戰中,福島正則、加藤正清等人為何加入德川家康的東軍
    福島正則、加藤正清等人都是豐臣秀吉提拔的武將,出身低微的他們能夠成為一方諸侯是豐臣秀吉給的機會,所以豐臣秀吉對他們可謂恩重如山。可是,豐臣秀吉死後,關原合戰爆發,福島正則、加藤正清等人卻加入了德川家康的東軍,為德川家效力,這是為什麼呢?
  • 聚焦「詩歌周」|中外詩人觀摩正則學校詩教活動:詩歌進校園,校園盡...
    12月12日下午,中國作家協會副主席、書記處書記吉狄馬加和中外詩人、作家、學者,中華詩詞學會團隊,友好城市及兄弟縣市嘉賓一行,走進汨羅市正則學校觀摩詩教活動,在充滿激情的詩會節目中,在學生們創作的詩句裡,收穫驚喜和感動。下午四點,在正則學校體育館觀眾席各個方位響起的洪亮誦詩聲中,中國•汨羅江國際詩歌藝術周"詩歌進校園詩會"專場節目拉開序幕。