正規表示式入門

2021-08-04 13:21:36 字數 2508 閱讀 4140

要談論正規表示式,就得先了解一下posix。posix的全稱是portableoperating system inte***ce for unix,它由一系列規範構成,定義了unix作業系統應當支援的功能,它定義了bre(basic regular expression,基本型正規表示式)和ere(extended regular express,擴充套件型正規表示式)兩大流派。

正規表示式由只代表自身的字面值和代表特定含義的元字元組成,除非特別說明,正規表示式嚴格區分大小寫。正規表示式的大致匹配過程是:

1.依次拿出表示式和文字中的字元比較,

2.如果每乙個字元都能匹配,則匹配成功;一旦有匹配不成功的字元則匹配失敗。

3.如果表示式中有量詞或邊界,遵循量詞或邊界指定的規則來匹配。

擴充套件正規表示式與基礎正規表示式的區別在於:? + () {} 這幾個字元。

基礎正規表示式中,如果你想? + () {}表示特殊含義,你需要將他們轉義

而擴充套件正規表示式中,如果你想? + () {} 不表示特殊含義,你需要將他們轉義。

所謂特殊含義,就是正規表示式中的含義。非特殊含義,就是這個符號本身。

+,和*中大家會遇到貪婪模式的說法,也有稱最長匹配原則,本質就是趨向於最大長度匹配,

(匹配的時候需要使用兩個方括號,如[[ :alpha:]])

.  表示任意單個字元,.會匹配除了換行符的任意字元

[ ]   表示匹配範圍內的任意單個字元

[^ ] 表示匹配範圍外的任意單個字元

[:alpha:]  任意乙個字母(相當於a-za-z)

[:upper:] 任意乙個大寫字母(相當於a-z)

[:lower:] 任意乙個小寫字母(相當於a-z)

[:digit:]  任意乙個數字(相當於0-9)

[:space:] 水平和垂直的空白字元(比blank包含的更多)

[:blank:]  空白字元(空格和製表符)

[:punct:] 標點符號

[:alnum:]  任意字母和數字(相當於0-9a-za-z)

[:print:]  可列印字元

*   表示*號前面的乙個字元的0-n次(它有乙個貪婪模式,會盡量匹配最長)

.*   表示任意多個長度的字元

\?   表示\?符號前的字元0-1次

\+    匹配\+前的字元至少1次

\   表示\符號前的字元的m-n次

\    表示符號前的字元m次

\    表示匹配前面字元至少n次

\     表示匹配前面字元最多n次

^ 之後接字元    表示^ 之後的字元出現在行首

$ 之前接字元    表示$之前的字元出現在行尾

\> 表示\> 符號之後的字元出現在單詞的尾部

\< 表示\< 之前的字元出現在單詞的首部

\《字元 \>      表示只有小於號和大於號之間的字元

分組 : \(\) 將乙個或多個字元**在一起,當作乙個整體進行處理,如: \(root\)+

後向引用 : 引用前面的分組括號中的模式所匹配字元,而非模式本身

或者 : \|

.  表示任意單個字元,.會匹配除了換行符的任意字元

匹配指定範圍內的任意單個字元

[^]  匹配指定範圍外的任意單個字元

[ : alnum : ]   字母和數字

[ : alpha : ]   代表任何英文大小寫字元,亦即 a-z, a-z

[ : lower : ]   小寫字母

[ : upper : ]   大寫字母

[ : blank : ]   空白字元(空格和製表符)

[ : digit : ]   十進位制數字

[ : xdigit : ]  十六進製制數字

[ : graph : ]   可列印的非空白字元

[ : print : ]   可列印字元

[ : punct : ]   標點符號

*: 匹配前面字元任意次,包括0次

? : 0或1次

+: 1次或多次

匹配前面的字元n次

匹配前面的字元至少m次,至多n次

匹配前面的字元至多n次

匹配前面的字元至少n次

^   行首錨定,用於模式的最左側

$   行尾錨定,用於模式的最右側

\< 或 \b     詞首錨定,用於單詞模式的左側

\> 或 \b     詞尾錨定;用於單詞模式的右側

\匹配整個單詞

():分組,後面可以使用1 ,2 ,3...引用前面的分組

a|b : a或b

優先順序符號

*、+、?、、、

1找出/etc/rc.d/init.d/functions的基名(basename可以直接獲取)。

2 找出/etc/rc.d/init.d/functions的目錄名(dirname可以直接獲取)。

3 統計last命令中以root使用者登入的每個主機ip登入次數。

4 顯示ifconfig命令中所有的ipv4位址。

5顯示/etc/passwd中以/bin/bash結尾的行。

正規表示式 正則入門

先從乙個例子開始正規表示式。書寫乙個匹配手機號的正規表示式,為了方便討論,假定手機號是1開頭,第二位只能是3 5 8中的其中乙個,總共11位的數字,形如13 匹配手機號的正規表示式為 1 358 d 下面介紹此正規表示式中的各個符號的含義。表示字串的開頭,後面緊接著1,表示匹配的字串要以 1 開頭。...

正規表示式入門

對於文字字元,有11個字元被保留作特殊用途。他們是 這些特殊字元也被稱作元字元 不可顯示字元 可以使用特殊字串行來代表某些不可顯示字元 代表tab 0x09 代表回車符 0x0d 代表換行符 0x0a 字符集 字符集是由一對方括號 括起來的字元集合。使用字符集,你可以告訴正規表示式引擎僅僅匹配多個字...

正規表示式入門

老師說過 正規表示式就是用字串讀取字串!學習正規表示式的最好方法是從例子開始,理解例子之後再自己對例子進行修改,實驗。下面給出了不少簡單的例子,並對它們作了詳細的說明。假設你在一篇英文 裡查詢hi,你可以使用正規表示式hi。這幾乎是最簡單的正規表示式了,它可以精確匹配這樣的字串 由兩個字元組成,前乙...