Regex快速入門【轉】

來源:互聯網
上載者:User

標籤:分配   world   名稱   name   運算式   文法   one   是什麼   等等   

首先簡單介紹下Regex:

      在編寫處理字串的程式或網頁時,經常會有尋找符合某些複雜規則的字串的需要。Regex就是用於描述這些規則的工具。換句話說,Regex就是記錄文本規則的代碼。

下面就看看Regex裡亂七八糟的字元都是什麼意思:

1、常用的元字元
      代碼                               說明                    
. 匹配除分行符號以外的任一字元
\w 匹配字母或數字或底線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字串的開始
$ 匹配字串的結束

 

 

 

 

 

 

 

那我們試著理解下:

\bhello\b  其實就是尋找單詞hello了——先是某個單詞開始處(\b),然後是字串hello,最後是單詞結束處(\b)。

010-\d\d\d\d\d\d\d\d  比如北京的固定電話——先是010-,然後是8個數字(\d)。

^\d{18}$ 比如社會安全號碼——先是字串開始(^),然後是18位元字(\d),最後字串結束($)。

2、常用的限定符
       代碼                              說明                        
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n, } 重複n次或更多次
{n,m} 重複n到m次

 

 

 

 

 

 

 

\ba\w*\b 匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然後是字母a,然後是任意數量的字母或數字(\w*),最後是單詞結束處(\b)。

windows\d+ 匹配windows開頭後面是一位或多位元字的,windows7、windows10等等——\d+即匹配一次或多次數字。

010-\d{8} 也是匹配北京固定電話,跟上面010-\d\d\d\d\d\d\d\d是一個意思,這個更簡便——\d{8}就是連續匹配八次數位意思。

3、常用的反義代碼
  代碼  說明
\W  匹配任意非字母或數字或底線或漢字的字元
\S 匹配任意非空白符的字元 
\D 匹配任意非數字字元
\B 匹配非單詞開始或結束的地方 
[^x] 匹配除x以外的任一字元 
[^aeiou] 匹配除母音以外的任一字元

 

 

 

 

 

 

 

"s[^"]+" 匹配用引號括起來的以s開頭的字串。

4、常用分組文法
代碼 說明
(exp) 匹配exp,並捕獲文本到自動命名的組裡
(?<name>exp) 匹配exp,並捕獲文本到名稱為name的組裡,也可以寫成(?‘name‘exp)
(?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp後面的位置
(?!exp) 匹配後面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置

 

 

 

 

 

 

 

\b\w*h(?!e)\w*\b 這個相對複雜一點,但是藉助上面的表格,應該也能讀懂,下面詳細分析下——單詞開始(\b);然後跟零個或多個字母(\w*),因為是單詞嘛,就只能是字母啦;接著是字母h,後面接一個不是e的字元(?!e),然後又是零個或多個字母(\w*),直到單詞結束(\b)。那我們就清楚了,也就是找“含有h字母,但h後面不是e的單詞”,比如him、honey。而把諸如hello、help這樣的單詞排除。

5、懶惰限定符
      代碼                                    說明                              
*? 重複任意次,但儘可能少重複
+? 重複1次或更多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{n,m}? 重複n到m次,但儘可能少重複
{n, }? 重複n次以上,但儘可能少重複

 

 

 

 

 

 

當Regex中包含能接受重複的限定符時,通常的行為是匹配儘可能多的字元。例如:a.*b 它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配;但是用 a.*?b 搜尋的話會匹配aab(第一到第三個字元)和ab(第四到第五個字元),這叫懶惰匹配

6、常用的其他符號
代碼 說明
\. 元字元轉義。.是元字元,你沒有辦法匹配它,因為會被理解成別的意思,這時你就得使用\來取消這些字元的特殊意義,即\.。同樣的,其他元字元像*?+等等都需要轉義。
[] 字元集。例如[0-9]匹配數字0到9,等同於\d;[a-z]匹配小寫字母;[.?!]匹配標點符號.?!
() 分組。每個組自動擁有組號,從左向右,第一個出現的分組的組號為1,第二個為2,以此類推。(\d{1,3}\.){3}\d{1,3} 是一個簡單的IP地址匹配運算式——\d{1,3}匹配1到3位的數字,(\d{1,3}\.){3}匹配三位元字加上一個英文句號(這個整體也就是這個分組)重複3次,最後再加上一個一到三位的數字(\d{1,3})。\b(\w+)\b\s+\1\b 可以用來匹配重複的單詞,像go go——首先是一個單詞,這個單詞含有一個或多個字母\b(\w+)\b,該單詞會被捕獲到編號為1的分組中,然後是1個或多個空白符(\s+),最後是分組1中捕獲的內容(也就是前面匹配的那個單詞)(\1),單詞結束(\b)。
|  分枝。^\d{17}(\d|[xX])$ 可用來驗證是否為社會安全號碼碼——字串開始(^),接著匹配17位元字(\d{17}),然後是個數字(\d)或者(|)字母x或X([xX]),字串結束($)。
//i  一次匹配。正則表達字面量。舉例見下文。
//g 全域匹配。正則表達字面量。 舉例見下文。

 下面是//i和//g的用法,我們從一段代碼中加深理解:

 1 <html> 2 <body> 3  4 <script type="text/javascript"> 5  6      var str="Welcome to Microsoft! "; 7      str=str + "We are proud to announce that Microsoft has "; 8      str=str + "one of the largest Web Developers sites in the world."; 9      document.write(str.replace(/Microsoft/i, "W3School"));10 11 </script>12 13 </body>14 </html>

上面的代碼呢,是想把字串中的Microsoft替換成W3School,當Regex為/Microsoft/i時,運行結果:Welcome to W3School! We are proud to announce thatMicrosoft has one of the largest Web Developers sites in the world.  可以看出只有第一個Microsoft被替換了,即一次匹配

我們將Regex/Microsoft/i改為/Microsoft/g,結果就變為:Welcome to W3School! We are proud to announce that W3School has one of the largest Web Developers sites in the world. 也就是說全文凡是有Microsoft的地方都被替換成W3School,即全域匹配。 

  

當然還有很多代碼沒有涉及到,但是很多Regex應該能看懂了,入門了後面的學習就相對簡單了。如果沒懂可能確實我講得不清楚。大家可以去搜尋相關更多文章,每個作者表達事情的方式都不一樣,你可以看看你能更快更好地接收誰的說法。

以上內容如果有誤,深表抱歉,也希望大家能及時指出,不吝賜教,謝謝。

轉載自:http://www.cnblogs.com/realcare/p/6028622.html

Regex快速入門【轉】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.