《正規表示式必知必會》學習筆記以及示例文件
前言
最近又把正則拿出來看。這本書還是要經常複習一下的。書裡有很多示例,講解的也很透徹,動手跟著複習一遍收穫很多。
實驗工具你可以到這裡下載,免費版,匹配次數也沒有限制:
http://www.regexlab.com/zh/mtracer/
還有一個選擇是sublime text,免費版即可,搜尋時,開啟搜尋框裡面的正則按鈕即可(一個.*類似的圖示)。
另外,再提供個視覺化工具,用圖形來幫助你理解正則的邏輯: https://jex.im/regulex/#!flags=&re=%5E(a%7Cb)*%3F%24
1 正則的用途
正規表示式簡稱正則。我們可以用它來匹配字串。搜尋字串,例如搜尋car,Car,CAR。
當然也可以用來做替換。例如將http://www.ituring.com.cn 替換為<a href="http://www.ituring.com.cn" >圖靈科技</a>
2 匹配單個字元
我們用英文的句點來匹配單個字元。
請您來想一想:.a.
能夠匹配到什麼?如果我們要匹配最後三行,應該怎麼寫正規表示式呢?
示例2-1:
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
.a.\.xls
試試能匹配到什麼?\.
指什麼,你知道嗎?
3 匹配一組字元
請問如果要在下面文字中,我只想匹配n和s開頭的文字,該如何做?
示例3-1:
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
ca1.xls
[ns]a.\.xls
怎麼樣呢?
我們再加一組例子,你再看看[ns]a.\.xls
匹配的對不對。
示例3-2:
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
ca1.xls
usa1.xls
再試試[ns]a[0-9]\.xls
呢?
小練習,你來試一下,要匹配下面的十六進位制顏色程式碼,該怎麼寫呢?
示例3-3:
body {
background-color: #fefbd8; }
h1 {
background-color: #0000ff;}
div {
background-color: #d0f4e6;}
span {
background-color: #f08970;}
取反^
的示例,下面資料中,如何取出sam.xls:
示例3-4:
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
sam.xls
na1.xls
na2.xls
sa1.xls
4 元字元
元字元包括- \[]
。當然還有很多。先介紹這些。
示例4-1:
<body>
<h1>Welcome to my Homepage</h1>
Content is divided into two sections:<br/>
<h2>SQL</h2>
Information about SQL.
<h2>RegEx</h2>
Information about Regular Expressions.
<h2>This is not valid HTML</h3>
</body> `
看看圖片裡面和你做法一樣嗎?
5 重複匹配
5.1 *?+
來匹配
這一節也學了很多次,用的時候還是混淆。今天編個口訣記一下。零星(重複次數大於等於0次的用*),一加手機(重複次數≥1的用加號),自問(獨自一個人的用問號)。
怎麼樣,你記住了嗎。
看看如何匹配下列電子郵件地址,一邊做一邊想一想:
示例5-1 匹配郵件
Send personal email to ben@forta.com. For questions about a book use support@forta.com. Feel free to send unsolicited email to spam@forta.com (wouldn't it be nice if it were that simple, huh?).
\w+@\w+\.\w+
可以嗎?
示例5-2 匹配郵件
y@ituring.com.cn
yf@itruing.com.cn
yangf@ituring.com.cn
\w+@\w+\.\w+
還可以嗎?該怎麼改進?
示例5-3 匹配郵件地址
Send personal email to ben@forta.com or ben.forta@forta.com. For questions about a
book use support@forta.com. If your message is urgent try ben@urgent.forta.com. Feel
free to send unsolicited email to spam@forta.com (wouldn't it be nice if it were that simple, huh?).
[\w.]+@[\w.]+\.\w+
可以嗎?
示例5-4 匹配網址
The URL is http://www.forta.com/, to connect
securely use https://www.forta.com/ instead.
https?:\/\/[\w.\/]+
可以嗎?
示例5-5 匹配回車換行符
"101","Ben","Forta"
"102","Jim","James"
"103","Roberta","Robertson"
"104","Bob","Bobson"
5.2 {n,m}來重複
* + ?
可以來表示重複次數,但是它們有一個明顯的缺陷。就是無法精確表達重複次數。
正規表示式中我們用{m,n}
來實現這個。花括號也是元字元。
在這個表示式裡面,你可以只有m,{m}
那就是m次;也可以m和n都有,就是大於等於m,小於等於n次,也可以只有m和逗號,就是m次起步,上不封頂。
示例5-6 匹配RGB顏色的16進位制程式碼
body {
background-color: #fefbd8;
} h1 {
background-color: #0000ff;
} div {
background-color: #d0f4e6;
} span {
background-color: #f08970;
}
#[A-Fa-f0-9]{6}
或者[:xdigit:]{6}
[:xdigit:]是POSIX表示的正則,可以參考這裡。
示例5-7 匹配各種日期
4/8/17
10-6-2018
2/2/2
01-01-01
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}
試一下。
請注意,這個正則並沒有驗證日期的真實性。只是匹配了格式。
示例5-8 匹配美元金額
1001: $496.80
1002: $1290.69
1003: $26.43
1004: $613.42
1005: $7.61
1006: $414.90
1007: $25.00
\$\d{3,}\.\d
或者\d+: \$\d{3,}\.\d
注意美元符也是元字元。需要轉義。
5.3 防止過度匹配
你對比下*和{n,} +
與?的區別。
示例5-9匹配html標記
This offer is not available to customers
living in <b>AK</b> and <b>HI</b>.
請試一下<b>.*?</b>
,為什麼這裡用?問號呢,就是將貪婪模式轉換為懶惰模式。
變為?,+變為+?,{n,}變為 {n,}?就將貪婪模式變為了懶惰模式。
6邊界匹配
所謂的邊界匹配,簡單說就是將cat和scattered裡的cat區分出來的能力。它匹配的是邊界位置。
6.1單詞邊界
示例6-1
The cat scattered his food all over the room.
這個可以用\b
,\b
匹配的是一個位置,它位於\w
能匹配到的內容(字母、數字和下劃線)和\W
(不構成單詞的其他字元,也就是非字母、數字、下劃線的字元)能匹配的東西之間。
示例6-2
The captain wore his cap and cape proudly as
he sat listening to the recap of how his
crew saved the men from a capsized vessel.
這次試一下,如何匹配cap開頭的單詞,如何匹配cap結尾的單詞?
Please enter the nine-digit id as it
appears on your color - coded pass-key.
6.2 字串邊界
^
和$
分別用來匹配
相關文章
- MySQL必知必會》正規表示式MySql
- JS 中正規表示式必知必會JS
- 正規表示式學習筆記筆記
- 爬蟲必學知識之正規表示式上篇爬蟲
- Ruby學習筆記-正規表示式筆記
- 正規表示式學習筆記一筆記
- PERL學習筆記---正規表示式筆記
- 正規表示式學習筆記 (轉)筆記
- mysql必知必會筆記MySql筆記
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- Python學習筆記 - 正規表示式Python筆記
- SQL必知必會筆記(上)SQL筆記
- SQL必知必會筆記(下)SQL筆記
- js加固之正規表示式學習筆記JS筆記
- 學習筆記-5.1.正規表示式1筆記
- Python下正規表示式學習筆記Python筆記
- 正規表示式學習筆記(1)-認識正則筆記
- 《SQL必知必會》讀書筆記SQL筆記
- 《Mysql必知必會》讀書筆記MySql筆記
- python 中的正規表示式學習筆記Python筆記
- Kotlin學習筆記(五十八)正規表示式Kotlin筆記
- PERL學習筆記---正規表示式的應用筆記
- 工作學習筆記(二) 正規表示式(轉載)筆記
- 正規表示式(筆記)筆記
- MySQL必知必會 學習筆記 第十四章 使用子查詢MySql筆記
- Python學習筆記|Python之正規表示式Python筆記
- JavaScript正規表示式學習筆記(二) - 打怪升級JavaScript筆記
- 正規表示式學習
- 正規表示式速查筆記筆記
- 正規表示式筆記(四)筆記
- 正規表示式筆記(三)筆記
- 正規表示式筆記(二)筆記
- 正規表示式筆記(一)筆記
- python爬蟲學習筆記4-正規表示式Python爬蟲筆記
- Day1-學習筆記-js之正規表示式筆記JS
- 正規表示式的學習
- Oracle正規表示式學習Oracle
- 學習Java:正規表示式Java