fei 正規表示式 正規表示式小結

2021-10-13 04:57:04 字數 2856 閱讀 5390

常用的元字元常用的反義**常用的限定符

**/語法

說明**/語法

說明**/語法

說明\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 正規表示式是乙個字串,使用單個字串來描述 用來定義匹配規則,匹配一系列符合某個句法規則的字串。在開發中,正規表示式通常被用來檢索 替換那些符合某個規則的文字,也...