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 中支援巢狀的標籤如 等。本節將要討論的是,想辦法把有巢狀的的成對...