正規表示式學習1 基本元符

2021-09-08 12:45:08 字數 3782 閱讀 3295

正規表示式-菜鳥教程:

正規表示式30分鐘入門教程:

deerchao.net/tutorials/regex/regex.htm

下面的內容感覺看著不順眼,還是去看菜鳥教程

裡面的教程,感覺寫的很完善,很適合我這種初學者。

參考**

deerchao

表1.常用的元字元 **

說明.匹配除換行符以外的任意字元

\w匹配字母或數字或下劃線或漢字(匹配不了漢字,需要用

[\u4e00-\u9fa5]進行匹配

)\s匹配任意的空白符

\d匹配數字

\b匹配單詞的開始或結束

^匹配字串的開始

$匹配字串的結束

表2.常用的限定符(例2)

**/語法說明*

重複零次或更多次

+重複一次或更多次

?重複零次或一次(針對的是排在他前面的那串-可能是乙個字元也可能是[ab]一組數)

當該字元緊跟在任何乙個其他限制符 (*, +, ?, , , ) 後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜尋的字串,而預設的貪婪模式則盡可能多的匹配所搜尋的字串。例如,對於字串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。

重複n次,n雖然可以等於0但是沒有意義

重複n次或更多次

重複n到m次,m>=n,n>=0

想要查詢「*」,「+」,「\」這種元字元本身,需要進行轉義即在前面加個「\」

[.?!]匹配標點符號(.或?或!)在中括號中,不需要轉義

「」中括號裡面可以隨便放需要匹配的物件,查詢的時候,只要在裡面存在的就是符合的

表3.常用的反義**

**/語法

說明\w

匹配任意不是字母,數字,下劃線,漢字的字元

\s匹配任意不是空白符的字元

\d匹配任意非數字的字元

\b匹配不是單詞開頭或結束的位置

[^x]

匹配除了x以外的任意字元==這個x可以換成任意字元

[^aeiou]

匹配除了aeiou這幾個字母以外的任意字元

表4.常用分組語法,這個感覺好難 分類

**/語法

說明捕獲

(exp)

匹配exp,並捕獲文字到自動命名的組裡

(?exp)

匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?'name'exp)這個不曉得為什麼,嘗試了一下,用不了╮(︶﹏︶")╭,我猜是過期了

(?:exp)

匹配exp,不捕獲匹配的文字,也不給此分組分配組號

零寬斷言

(?=exp)

匹配exp前面的位置

(?<=exp)

匹配exp後面的位置這個不曉得為什麼,嘗試了一下,用不了╮(︶﹏︶")╭,我猜是過期了

(?!exp)

匹配後面跟的不是exp的位置

(?匹配前面不是exp的位置這個不曉得為什麼,嘗試了一下,用不了╮(︶﹏︶")╭,

我猜是過期了

注釋(?#comment)

這種型別的分組不對正規表示式的處理產生任何影響,用於提供注釋讓人閱讀。這個不曉得為什麼,嘗試了一下,用不了╮(︶﹏︶")╭

「(",")」在正則中也是特殊的字元,用來指定子表示式的(也叫做分組)

(例1)

這裡有些複雜的地方:

使用小括號指定乙個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其它程式中作進一步的處理。預設情況下,每個分組會自動擁有乙個組號,規則是:從左向右,以分組的左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推。

後向引用用於重複搜尋前面某個分組匹配的文字。例如,\1代表分組1匹配的文字。難以理解?請看示例:

(例3)

\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。這個寫法不知道為什麼我試了並沒有用

例1:(\d\.)\d

分解:第一步:()括號中的物件

firstobj: \d\.=》\d表示必須選擇1-3個數字,\.轉義字元「.」,就是後面再綴個"."必填,像「1.」,"22."都是匹配的

第二步:

secondobj:(firstobj)用括號括起來後,這就是乙個整體了

secondobj就是整個物件進行重複三次操作。相當於firstobjfirstobjfirstobj( \d\. \d\. \d\.)

第三步:剩下的\d就是後面放個1-3個數字

像1.1.1.1這種就是匹配的

例2: 2[0-4]\d|25[0-5]|[01]?\d\d?

分解:2[0-4]\d=》 第一位2,第二位0-4之間的數字(包含)必選乙個,第三位數字

25[0-5]=》前兩位25,第三位在0-5之間的數字必選乙個

[01]?\d\d?=》第一位0和1選乙個值,可選可不選,第二位必選乙個數字,第三位數字可選可不選

例3:\b(\w+)\b\s+\1\b

分解:第一步:\b(\w+)\b單看這一句,就是單詞檢索

第二步:\s+即1-n個空格

第三步:\1這個放在這裡就相當於拿到第一步中匹配到的物件放到這個位置進行全匹配

舉個例子(空格用紅色的

「~」代替,好認一些):

1. ab

~~cdab 結果:沒有匹配,匹配流程:第一步中獲取到ab,然後\1就變為了ab,即當前的正規表示式就變成了

ab\s+ab\b 那麼繼續匹配則是找不到符合的物件的

2.abc

~~abcd 結果:沒有匹配,匹配流程:第一步中獲取到ab,然後\1就變為了abc,即當前的正規表示式就變成了

abc\s+abc\b 由於後面還需要\b單詞結束,即需要是整單詞匹配,不符號要求

3.abcd

~~abcd xe 結果:abcd

~~abcd 匹配成功。

4.ab

~~abc

~~abc ab 結果:abc

~~abc 匹配成功,匹配流程:第一步中獲取到ab可惜找不到匹配的物件,那麼只能繼續找到第二個單詞abc,此時找到了。當然還會繼續下去找第三個單詞,可惜第三個單詞後面的字串並不符合

5.ab

~~abc

~~abc

~~abc 結果:abc

~~abc

6.ab

~~abc

~~abc

~~abc

~~abc 結果:第乙個:abc

~~abc,第二個:abc

~~abc

例4:(\d([a-z]+))\s\2 分組是從左邊開始往右依次加1,第乙個括號匹配的就是第一組,第二個就是第二組,而不是計算法則中先裡後外

1abc abc 3a ax

結果:共找到 2 處匹配:

1abc abc

3a a

例5:(\d([a-z]+)?)\s\2 第二組加了?,則可有可無

1 1abc 3a ax

結果:共找到 2 處匹配:

1 3a a

《學習正規表示式》(1)

1.稱為元字元,不參與匹配。2.a a 字元組或者字符集。例如 0 9 或者 01239 前者匹配0 9所有數字字元,後者匹配特定的五個數字字元。3.d 匹配所有阿拉伯數字,成為字元組簡寫式 4.d 匹配非數字字元 5.使用.匹配任意字元,但通常不包括換行符.使用方法 帶匹配連線符 舉例 表示匹配 ...

正規表示式 1 初識正規表示式

簡單地說,正規表示式就是一套處理字串的規則和方法,以行為單位對字串進行處理,通過特殊的符號的輔助,我們可以快速的過濾,替換某些特定的字串。運維工作中,會有大量訪問日誌,錯誤日誌,大資料。如何能夠快速的過濾出我們需要的內容,這就需要正規表示式。awk,sed,grep egrep 三劍客要想能工作的更...

正規表示式 1 正規表示式基礎

1.正規表示式基礎 正規表示式描述了一種字串匹配的模式,即可以使使用者通過一系列普通字元或特殊字元構建能夠明確描述文字字串的匹配模式,可以用來檢查某個字串是否含有某種子字串,將匹配的子字串做替換或者從某個字串中取出符合某個條件的子字串等。1.1 正規表示式的基本結構 乙個正規表示式就是由普通字元 如...