正則的那點事

2021-09-11 09:28:13 字數 1746 閱讀 4040

正規表示式是為了對字串進行有效資料提取以及匹配的一種機制,那麼我們首先就需要對字串有一定的了解,比如隨意一段話,

」32 12 3 6 1 3 3」,

這是 《我的乙個道姑朋友》的譜子其中一段,一共是9個音符,但是卻有16個位置,這是為什麼呢

字串在匹配的過程中將會以第乙個位置開始獲的控制權,然後從左往右進行依次匹配,每嘗試匹配一次,就會把控制權交由下乙個位置,然後依次匹配,至於正則匹配的基礎知識,這裡不做多講,網上有很多

那麼我們接下來講什麼呢,我覺得還是按照深淺的層次分類來說

1. 這裡有乙個例子開頭

這是一段字串,我搞了乙個正則去匹配

(.)*複製**

一眼就可以看得出來我要匹配的是

的資料,如果不出意外,應該會有兩個返回結果,但是我這裡得到的結果確是

那麼如果我把aaa替換成其他的資訊呢,比如乙個標籤,

結果發現返回仍然只有一條,這個時候,我再試一試這麼乙個正則

(.)*?複製**

裡卻有了兩條返回,明明只是多了乙個?,為什麼效果卻不一樣,那麼這個貪與不貪說的是什麼呢,貪的是說正則在不約束的情況下會自行向右進行匹配,直到匹配結束,而且只要匹配到資料有正則的最後乙個匹配值就算是匹配到了,就好比你讓他拿2113,他卻在拿2113後又拿了許多東西,只要最後乙個拿到了3,他就算匹配到了。

而乙個問號的存在就是解決了正則貪婪的問題,但是並不是把放在**都可以解決貪婪的,在正則裡,有一些屬於貪婪模式量詞,分別有

「」、「」、「?」、「*」和「+」複製**
,這些才是正則貪婪的元凶,非貪婪模式的時候則會在第一次匹配成功結束後結束匹配,那麼至於為什麼圖上會有兩個返回值,emmmm,那是因為我開了全域性的原因

什麼是斷言,我們要知道什麼是零寬,說實在的這個真的沒啥好知道的,零寬其實就是零寬度,而這裡的寬度講的是字串位置的寬度,正則匹配的時候,如果匹配不到,會把控制權不斷交由下乙個規則會判斷,但是判斷的位置還是在同一位置,這也就是所謂零寬,在斷言這裡,還是有很多比較實用的知識點,比如

(?=x)複製**
,這個又被稱作零寬度正**先行斷言,有點長,舉個例子。

這裡的正規表示式的意思是匹配lxg前面的資料,有點判斷處理的意思,如果我們把

\w+放在

(?=ma)後面,我們獲得就是malxg,這是因為控制權是由左往右,細細思索也就會發現其中緣由,可如果我們不想匹配ma,只想匹配lxg怎麼辦,那麼我們只需要使用(?<=ma)\w+,那麼就會自動匹配ma後面的了,這些需要一點記憶。

這裡不只有分組,還有命名空間。hhhh,例如

(\w+)被乙個括號包圍起來是乙個整體,表示乙個分組

(?'group'\w+))表示了乙個叫做group的分組

(?:\w+)匹配exp,不捕獲匹配的文字,也不給此分組分配組號

每一次匹配成功都會往組內填充匹配的位置,這裡做的是堆疊處理

反向引用的目的是為了把組內匹配的資料反向匹配,有些類似變數的存值與取值,

比如『asdgfdh』;而正則為([a|b])\1就是把[a|b]匹配到的資料堆疊的第一位取出來作為新的匹配規則來匹配,([a|b])也就是乙個分組

正則講到這裡,算是講了一部分了,也算是在平時湧出比較多的,基礎的我也不多講,主要還需要練習,夜有些晚了,明天又是滿滿一天的課,晚安,世界,晚安,讀者。

this的那點事

對於很多初學者,this總是搞得我們暈頭轉向。現在,我就簡單的總結一下關於this的那點事。this在函式定義時經常是不能確定的,只有在函式執行的時候才能最終確定this的歸屬。this總是指向最後呼叫它的物件,那麼怎麼知道到底是誰呼叫的呢?其實很簡單,我們知道函式呼叫的其中一種方法就是利用call...

拓展的那點事

時間過得很快,又到了公司每年的拓展時間,今年公司拓展活動是安排在崇明島,因為時間關係自己有一些瑣事不能參加,至今心裡還有一絲的眷戀。拓展訓練不是簡單的娛樂和體育活動,它的中間融合了各種挑戰的元素,這些東西一般是在大學和工作中很難學到的,有時我們看了一些書就感覺自己知道和明白這些道理,但是遇到真真的事...

typedef的那點事

typedef struct node node,linklist 以上這段 幾乎在任何資料結構教材中都會出現,如此經典的一段 的理解還真是費了我一番功夫。之前學的是c 這種純正c風格的寫法幾乎沒有用到過。1.struct node 定義了乙個stuct node型別的結構體 c語言規定結構體型別為...