常用的元字元常用的反義**常用的限定符
**/語法
說明**/語法
說明**/語法
說明\w
匹配字母或數字或下劃線或漢字
\w匹配任意不是字母、數字、下劃線、漢字的字元
重複零次或者更多次
\s匹配任意的空白字元
\s匹配任意不是空白符的字元
重複一次或更多次
\d匹配數字
\d匹配任意非數字的字元
重複零次或一次
\b匹配單詞的開始或結束
\b匹配不是單詞開始或結束的位置
重複n次
匹配字串的開始
[^x]
匹配除了x以外的任意字元
重複n次到更多次
匹配字串的結束
[^aeiou]
匹配除了aeiou這幾個字母以外的任意字元
重複n到m次
匹配除換行符以外的任意字元
字元轉義:
如果你想查詢元字元本身的話,比如你查詢.,或者*,就出現了問題:你沒辦法指定它們,因為它們會被解釋成別的意思。這時你就得使用\來取消這些字元的特殊意義。因此,你應該使用\.和\*。當然,要查詢\本身,你也得用\\.
分枝條件:
正規表示式裡的分枝條件指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。聽不明白?沒關係,看例子:
0\d-\d|0\d-\d這個表示式能匹配兩種以連字型大小分隔的**號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)。
分組與捕獲:
常用分組語法
分類**/語法
說明捕獲
(exp)
匹配exp,並捕獲文字到自動命名的組裡
(?exp)
匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?'name'exp)
(?:exp)
匹配exp,不捕獲匹配的文字,也不給此分組分配組號
零寬斷言
(?=exp)
匹配exp前面的位置
(?<=exp)
匹配exp後面的位置(瀏覽器不支援)
(?!exp)
匹配後面跟的不是exp的位置
匹配前面不是exp的位置(瀏覽器不支援)
注釋(?#comment)
這種型別的分組不對正規表示式的處理產生任何影響,用於提供注釋讓人閱讀
我們已經提到了怎麼重複單個字元(直接在字元後面加上限定符就行了);但如果想要重複多個字元又該怎麼辦?你可以用小括號來指定子表示式(也叫做分組),然後你就可以指定這個子表示式的重複次數了,你也可以對子表示式進行其它一些操作(後面會有介紹)。
(\d\.)\d是乙個簡單的ip位址匹配表示式。要理解這個表示式,請按下列順序分析它:\d匹配1到3位的數字,(\d\.)匹配三位數字加上乙個英文句號(這個整體也就是這個分組)重複3次,最後再加上乙個一到三位的數字(\d)。
ip位址中每個數字都不能大於255. 經常有人問我, 01.02.03.04 這樣前面帶有0的數字, 是不是正確的ip位址呢? 答案是: 是的, ip 位址裡的數字可以包含有前導 0 (leading zeroes).
後向引用:
使用小括號指定乙個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其它程式中作進一步的處理。預設情況下,每個分組會自動擁有乙個組號,規則是:從左向右,以分組的左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推。
呃……其實,組號分配還不像我剛說得那麼簡單:
分組0對應整個正規表示式
實際上組號分配過程是要從左向右掃瞄兩遍的:第一遍只給未命名組分配,第二遍只給命名組分配--因此所有命名組的組號都大於未命名的組號
你可以使用(?:exp)這樣的語法來剝奪乙個分組對組號分配的參與權.
後向引用用於重複搜尋前面某個分組匹配的文字。例如,\1代表分組1匹配的文字。難以理解?請看示例:
\b(\w+)\b\s+\1\b可以用來匹配重複的單詞,像go go, 或者kitty kitty。這個表示式首先是乙個單詞,也就是單詞開始處和結束處之間的多於乙個的字母或數字(\b(\w+)\b),這個單詞會**獲到編號為1的分組中,然後是1個或幾個空白符(\s+),最後是分組1中捕獲的內容(也就是前面匹配的那個單詞)(\1)。
你也可以自己指定子表示式的組名。要指定乙個子表示式的組名,請使用這樣的語法:(?\w+)(或者把尖括號換成'也行:(?'word'\w+)),這樣就把\w+的組名指定為word了。要反向引用這個分組捕獲的內容,你可以使用\k,所以上乙個例子也可以寫成這樣:\b(?\w+)\b\s+\k\b。
零寬斷言:
接下來的四個用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像\b,^,$那樣用於指定乙個位置,這個位置應該滿足一定的條件(即斷言),因此它們也被稱為零寬斷言。
正規表示式中有前瞻(lookahead)和後顧(lookbehind)的概念,這兩個術語非常形象的描述了正則引擎的匹配行為。需要注意一點,正規表示式中的前和後和我們一般理解的前後有點不同。一段文字,我們一般習慣把文字開頭的方向稱作「前面」,文字末尾方向稱為「後面」。但是對於正規表示式引擎來說,因為它是從文字頭部向尾部開始解析的(可以通過正則選項控制解析方向),因此對於文字尾部方向,稱為「前」,因為這個時候,正則引擎還沒走到那塊,而對文字頭部方向,則稱為「後」,因為正則引擎已經走過了那一塊地方。如下圖所示:
所謂的前瞻就是在正規表示式匹配到某個字元的時候,往「尚未解析過的文字」預先看一下,看是不是符合/不符合匹配模式,而後顧,就是在正則引擎已經匹配過的文字看看是不是符合/不符合匹配模式。符合和不符合特定匹配模式我們又稱為肯定式匹配和否定式匹配。
現代高階正規表示式引擎一般都支援都支援前瞻,對於後顧支援並不是很廣泛,因此我們採用否定式前瞻來實現我們的需求,比如「找出不以某個特定字串打頭的條目」。
fei 正規表示式 正規表示式 中文
在網上看到很多對中文進行校驗的正則,但是很多在js裡使用會無效,下面給大家推薦幾個好的 w u4e00 u9fa5 uf900 ufa2d 1 乙個正規表示式,只含有漢字 數字 字母 下劃線不能以下劃線開頭和結尾 a za z0 9 u4e00 u9fa5 其中 powered by 25175.n...
正規表示式小結
正規表示式 regex 英 red eks 1,d d d d或者是 d 表示匹配4位數的數字。2.說明。這些可被稱作元字元。匹配除換行符以外的任意字元1 jk2yh jj w數字字母漢字下劃線 bst456 5ghgtft s匹配任意的空白符 space table鍵和半全形空格 d匹配數字 di...
正規表示式小結
最近學習了正規表示式,趁還熱乎,寫下這篇部落格,記錄一下。正規表示式 英語 regular expression,在 中常簡寫為regex 正規表示式是乙個字串,使用單個字串來描述 用來定義匹配規則,匹配一系列符合某個句法規則的字串。在開發中,正規表示式通常被用來檢索 替換那些符合某個規則的文字,也...