歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 正則表達式基礎語法摘要

正則表達式基礎語法摘要

日期:2017/3/1 9:09:57   编辑:Linux編程

什麼是正則表達式呢,先來看一下百度百科中的解釋:

正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表通常被用來檢索、替換那些符合某個模式(規則)的文本。

簡單來說,正則表達式是一種特定的模式,可以用來對文本進行匹配、替換或刪除等操作。正則表達式本身與編程語言無關,是一種強大的文本處理工具。

基礎概念

正則表達式由兩種字符構成:元字符普通文本字符。其中,元字符 即正則表達式中的特殊字符,為正則表達式提供了強大的描述能力,如:*.

量詞?, +, *。這三個元字符可以用來限定所作用元素的重現次數。
字符組:形如[Regex...]的表達式子句
貪婪:如*字符。貪婪量詞會匹配盡可能多的字符串
非貪婪模式:即盡可能少的匹配字符串,一般對表達式後加?即可實現

元字符總結

匹配單個字符

元字符匹配對象 \d 匹配一個數字 \D 匹配一個非數字字符 \w 匹配一個數字、字母和下劃線字符 \W 匹配一個非數字、字母或非下劃線的字符 \s 匹配一個空白符字符,如空格和制表符 \S 匹配一個非空白符字符,如空格和制表符 . 匹配除換行符以外的任意單個字符 [...] 字符組,匹配括號中的任意一個字符 [^...] 排除型字符組,匹配括號中未列出的任意一個字符 \Char 若Char是元字符,可以將其轉義為對應的普通字符進行匹配。如\.匹配一個“.”

有計數功能的元字符

元字符匹配對象 ? 匹配零次或一次 * 匹配任意多次,也可以不匹配 + 匹配任意多次,但至少必須匹配一次 {min, max} 至少匹配min次,至多匹配max次。 {, max} 至少匹配0次,至多匹配max次 {min, } 至少匹配min次,但匹配次數不設上限 {n} 匹配n

匹配位置的元字符

元字符匹配對象 ^ 匹配起始位置,當出現在字符組開頭時,表示排除(也可理解為取反) $ 匹配結尾位置 \b 匹配字符邊界,但不會消耗字符,只匹配一個位置。如從"This is Regex"中匹配"is": \bis\b

其他

元字符匹配對象 \ 匹配任意分割的表達式 (...) 限定多選結構的范圍,標注量詞作用的元素,可以為反向引用捕獲文本 \1, \2 ... 反向引用。匹配之前的第一,第二組括號內的表達式匹配到的文本

非貪婪模式

舉例:清溪路555號10號樓
匹配地址中的路號,首先可能會想到:.*(\d+)號.*,但實際上,前面的.*為貪婪模式,會首先向後盡可能多的匹配,會導致小括號中的\d+只能匹配到10號樓中的0(因為是從左向右開始匹配,.*匹配用掉了太多的字符串,只留下一個數字0\d+進行匹配)。
如果想要匹配出555,則需要寫成.*?(\d+)號.*,注意多了一個問號。這就是非貪婪模式,問號前面的表達式會盡可能少的匹配,只要整個表達式匹配成功即可。
基本上可以總結如下表達式:

元字符匹配對象 *? 匹配任意次,但要盡可能少 +? 匹配1次或更多次,但要盡可能少 ?? 匹配0次或1次,但要盡可能少 {min, max}? 匹配min到max次,但要盡可能少

分組

正則表達式中的分組,基本都由(exp)模式來實現,常見語法如下:

元字符匹配對象 (exp) 匹配exp並捕獲匹配到的值到默認的組裡 (?<name>exp) 匹配exp並捕獲值到name組中 (?:exp) 匹配exp,但不捕獲匹配到的值,也不給此組分配組號 (?=exp) 匹配exp前面的位置,如上面的地址,我們要提取小區地址,應該寫成(.+?(?=\w+?號樓)),會匹配出清溪路555號 (?<=exp) 匹配exp後面的位置 (?!exp) 匹配後面不是exp的位置,如137(?!\d)匹配的是137開頭的、非數字結尾的字符串,例:137a (?<!exp) 匹配前面不是exp的位置

Copyright © Linux教程網 All Rights Reserved