高階級 正規表示式

2021-07-10 16:02:42 字數 2079 閱讀 6986

php中的正則函式結語

正規表示式(regular expression):描述可能出現在使用者提交的文字中的一小段**,我們通過它,將出現的**塊替換為特殊格式。

正規表示式廣泛好用,但入門困難。

目標**塊被分隔符包圍,分隔符一般選用斜槓(/)或井號(#),也可以用除字母、數字和反斜槓之外的任何字元作為分隔符。反斜槓可以轉義,轉義在基礎級文章略有提及,此處不贅述。

預設情況下,正規表示式區分大小寫,不過我們可以通過模式修飾符(pattern modified),使正則忽略大小寫。

模式修飾符是乙個單個的字元標誌,跟在表示式的結束分隔符後。

符號注釋

i匹配時,不區分大小寫

符號-中文名—-注釋^

脫字字元

匹配字串的開始,自身不包含任何字元,只考慮字元位置

$美元符號

匹配字串的結尾,同上.點號

萬用字元,匹配任何單個字元,除了換行(\n)*星號

要求前面的字元出現0或多次,具有貪婪屬性1+加號

要求前面的字元出現1或多次,具有貪婪屬性?問號

匹配前面的子表示式0次或1次,在*+的後面加上乙個?就可以實現非貪婪(最小匹配,minimal match)

|管道符號

正則匹配管道左或右邊的模式

(…)圓括號

標記乙個子表示式的開始和結束位置。可對其應用乙個修飾符,至於結束括號後即可

[…]方括號

定義字元類(character class),匹配方括號列出的字元之一。在前方括號後加入^,即可匹配 除去方括號包含的字元

(escape sequences)

意義:匹配不太容易輸入的乙個字元,或匹配某種型別的乙個字元。

符號注釋

\n換行字元

\r回車字元

\t製表符

\s空白字元(whitespace character),等同[\n\r\t]

\s非空白字元,等同[^\n\r\t]

\d數字,等同[0-9]

\d非數字,等同[^0-9]

\w單詞字元,等同[a-za-z0-9_]

\w非單詞字元,等同[^a-za-z0-9_]

\b表示單詞邊界(起始/結束)

\b表示非單詞邊界(非起始/結束)

用來確認乙個特定的字串,是否匹配乙個正規表示式。

接受乙個正規表示式和乙個文字字串,並嘗試在字串中匹配該正規表示式。還接受另乙個文字字串,並用該字串來替換每一次正則匹配。

preg_replace (regexp, replacewith, oldstring [, $limit = -1(無窮) [, int &$count ]] )

例子:

$test = preg_replace('/_([^_]+)_/', '$1');

// 每乙個圓括號內,都包含了乙個塊內容,而塊內容的名稱按$1、$2……依次遞增,在jscript 中則使用 $0…$9 屬性。

搜尋字串而非正規表示式模式,類似preg_replace函式,但比之更為高效,對於不區別大小寫的簡單替換,可以用它來代替。

正規表示式並沒有那麼容易,但無論如何,既然從事這個職業,既然愛上了程式設計和程式設計所涉及的部分方面,我們就應該去盡力做好,將正則寫的優雅而易讀,這並不能從技術上降低正規表示式的複雜性,但可以使它們更容易被理解

by the way,匹配中文字元的正規表示式: [\u4e00-\u9fa5]。

參考資料:1

《php&mysql novice to ninja》(kevin yank [澳])

正規表示式 - 菜鳥教程

preg-replace - 官方手冊

匹配時,*+會很貪婪(greedy)的包含盡可能多的字元。 ↩

正規表示式高階

或 的小細節 替換匹配 任一側最大的表示式 2.正規表示式和相應編碼 3.正規表示式引擎 舉例簡單說明nfa與dfa工作的區別 比如有字串this is yansen s blog,正規表示式為 ya msen nsen nsem 不要在乎表示式怎麼樣,這裡只是為了說明引擎間的工作區別 nfa工作方...

正規表示式高階

捕獲組就是把正規表示式中子表示式匹配的內容,儲存到記憶體中以數字編號或手動命名的組裡,以供後面引用。表示式 說明 expression 普通捕獲組,將子表示式expression匹配的內容儲存到以數字編號的組裡 expression 命名捕獲組,將子表示式expression匹配的內容儲存到以nam...

正規表示式高階話題

1.表示式的遞迴匹配 有時候,我們需要用正規表示式來分析乙個計算式中的括號配對情況。比如,使用表示式 或者 可以匹配一對小括號。但是如果括號 內還嵌有一層括號的話 如 則這種寫法將不能夠匹配正確,得到的結果是 類似情況的還有 html 中支援巢狀的標籤如 等。本節將要討論的是,想辦法把有巢狀的的成對...