正則表達式是什麼?正則表達式
在編寫處理字符串的程序或網頁時,常常會有查找符合某些複雜規則的字符串的須要。正則表達式就是用於描述這些規則的工具,也就是對文字進行模糊匹配的語言。能夠完成如下功能:windows
(1)測試字符串的某個模式;(2)替換文本;(3)根據匹配模式纔可以字符串中提取子字符串。ide
元字符「?」與「()」函數
?表示緊靠前的選項無關緊要,例:abc能匹配ab和abc工具
()表示子匹配,例:a(bc)?能匹配a和abc。測試
11111-1234匹配模式「\d{5}(-\d{4})?",連續匹配兩個相同數字用(\d)\1,連續匹配五個相同數字(\d)\1{4};1221匹配模式(\d)(\d)\2\1。spa
\d表示匹配任意一個數字字符,{5}表示緊靠其前的元素項重複五次code
字符轉義對象
若是你想查找元字符自己的話,好比你查找.,或者*,就出現了問題:你沒辦法指定它們,由於它們會被解釋成別的意思。這時你就得使用\來取消這些字符的特殊意義。所以,你應該使用\.和\*。固然,要查找\自己,你也得用\\blog
例如:unibetter\.com匹配unibetter.com,C:\\Windows匹配C:\Windows。
RegExp顯示函數:newRegExp=("pattern"[,"flags"]);
RegExp隱示函數:/pattern/[flags].
"\"是轉義字符,構建顯示函數RegExp實例對象時,將"\"替換爲"\\"。例:varre1=newRegExp=("\\d{5});等價於varre2=/\d{5}/;
元字符分類
1、限定符
{n}重複n次,例:o{2}不能與bob中o匹配,能夠與food或foooood中兩個或連續兩個匹配。
{n,}重複n次或更屢次,最少出現n次
{n,m}重複n到m次,至少n次,至多m次
+必須出現一次或連續屢次,等效於{1,}
*出現連續屢次或零次,"zo*"與"z"和"zoo"都能匹配,等效於{0,}
?最多出現一次,等效於{0,1}
貪婪匹配與非貪婪匹配
默認狀況下正則表達式使用最長匹配原則,即貪婪匹配。例:「zoom」匹配「zo?」的部分換爲「r」,結果是「rom」,匹配「zo*」替換成「r」,結果是「rm」,而不是「room」。
當字符「?」緊跟其餘限定符以後,匹配模式變爲最短原則。例:「fooood」中,「fo+?」匹配的是「fo」,而「fo+」匹配「foooo」部分。
選擇匹配符
「|」例:chapter|section1匹配的是「chapter」「section1」,(chapter|section)1匹配「chapter1」「section1」。
2、分組組合與反向引用符
分組組合
將表達式中某部份內容組合起來的符號。(pattern)將pattern部分組合成一個可統一操做的組合項和子匹配,若要匹配字面意義上的括號字符「(」和「)」,在正則表達式中要分別使用「\(」和
「\)」。
(\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:\d{1,3}匹配1到3位的數字,(\d{1,3}\.){3}匹配三位數字加上一個英文句號(這個總體也就是這個分組)重複3次,最後再加上一個一到三位的數字(\d{1,3})。IP地址中每一個數字都不能大於255,因此只能使用冗長的分組,選擇,字符類來描述一個正確的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
反向引用
用於匹配分組組合捕獲到的內容的標識符。\num匹配編號爲num的緩衝區所保存的內容,這種方式爲子匹配的反向引用,能提供表示相同匹配項的能力。例:匹配連續五個數字字符。\d{5},能夠匹配12345,如果55555,須要使用(\d)\1{4}。匹配「itisthecostofofgasolinegoingupup?"中連續重複的單詞部分,用/\b([a-z]+)\1\b/gi。其中\b用於匹配單詞的邊界。
非捕獲匹配
(?:pattern)將pattern部分組合成一個可統一操做的組合項,但不把這部分當子匹配項捕獲,匹配的內容不存在緩衝區內供之後使用。適用於必須進行組合但又不想讓組合部分具備子匹配特色狀況。
例:(?:abc)?,"industry|industries"不能改寫成industry(ylies),如不須要引用或檢索括號中表達式所匹配結果,寫爲industry(?:ylies)。
正向「預測先行」匹配
(?=pattern),被搜索的字符串中必須有pattern部分匹配的內容,但不做爲匹配結果處理,也不會存在緩衝區中。例:windows(?=NT|2000)只與windows2000或windowsNT中的windows匹配,而不與windows2003中的windows匹配。該匹配結果只是windows部分。
反向「預測先行」匹配
(?!pattern),被搜索字符串中不能有pattern部分匹配的內容,功能同上。例:windows(?!NT|2000)不與windows2000或windowsNT中的windows匹配,而與windows2003中的windows匹配。