正規表示式 入門 簡單字元匹配 元字元

2021-06-13 21:58:44 字數 3084 閱讀 7506

好的工具可以提高工作效率,正規表示式絕對是這其中一員。最近抽時間大概了解了一下這方面的知識,整理了一下自己的一些筆記,文中示例通過vim編輯器來演示,匹配到的字元為黃色高亮顯示,並在下面註明了顯示結果。

首先,正規表示式的定義:一些用來匹配和處理文字的字串

主要用途:搜尋,替換

在正式開始之前,有一點需要特別強調:正規表示式的語法很容易掌握,但是真正的挑戰是如何運用那些語法把實際問題分解為一系列正規表示式並最終解決,必須通過自己多多實踐才能掌握。

下面乙個示例就是普通的文字匹配,我在vim中預設大小寫敏感,這樣我們可以觀察正規表示式的表現。事實證明,正規表示式是大小寫敏感的。

上面例子中,第1  4兩行是高亮的,顯示效果不太好,將就看下吧。

下面示例乙個萬用字元'.'的用法

.字元(英文符號)可以匹配任何乙個單一的字元、字母、數字、甚至是.本身。但是在絕大多數的正規表示式實現裡,不能匹配換行符。

上面例子中,只有第4行是高亮的。

在同乙個正規表示式中,允許使用多個.字元,可以連續,也可以間隔出現。

\. \是轉義字元,\.意思是匹配.本身,而不是任意字元

上面例子中,第1  3兩行是高亮的。

這個主要通過字符集的方式來實現。用來定義乙個字符集

字符集只能匹配特定的字元和字元區間

字符集的匹配結果是:能夠與該字符集中的任何乙個成員相匹配的文字

字元區間用'-'來定義,例如[0-9],表示0,1,2,。。。9 10個阿拉伯數字

常用字元區間有[a-z], [a-z], [0-9]。但是[a-z]不常用,因為它除了包含26個英文本母的大小寫,還包括[  ^等在ascii字元表中排列在z和a之間的字元。如果想匹配26個英文本母的大小寫,那麼可以用[a-za-z]這樣的形式。

上面的例子中,可以看到前兩行是高亮的

'-'是乙個特殊的元字元,用在中,作為元字元,在其他地方,只是乙個普通的字元,只能與本身匹配,並且不需要轉義

取非匹配:^, [^0-9], ^的效果作用於給定字元集合中的所有字元或字元區間,而不僅限於在^字元後面的那乙個字元或字元區間。

上面例子中,只有第4行是高亮的。

其實上面已經提到這個概念了,用在中的'-'是元字元。

元字元要匹配本身的話,需要用\來進行轉義。

[\b] 回退(並刪除)乙個字元(backspace鍵)

\f   換頁符

\n   換行符

\r   回車符

\t   製表符(tab鍵)

\v   垂直製表符

\s   任何乙個空白字元,等價於[\f\n\r\t\v]

\s   任何乙個非空白字元,等價於[^\f\n\r\t\v]  注意:[\b]不包含在內

首先,在vim中使用:set list命令來使空白字元顯示出來,

可以看到所有的$都高亮了。

btw,試了一下\s,好像vim的正則實現不支援這個。

\d   任何乙個數字字元,等價於[0-9]

\d   任何乙個非數字字元,等價於[^0-9]

前3行中的幾個數字都高亮了。

常用於匹配各種名字(如檔名,子目錄名,變數名,資料庫物件名等等)

\w   任何乙個字母數字字元(大小寫均可)或下劃線字元,等價於[a-za-z0-9_]

\w   任何乙個非字母數字或下劃線字元,等價於[^a-za-z0-9_]

根據字元的16進製表示來匹配

16進製制:\x0a == \n,ascii字元10

8進製: \012 等價於上面

這個在vim中不支援,試了一下不行。

[:alnum:]    任何乙個字母或數字,等價於[a-za-z0-9]

[:alpha:]    任何乙個字母,等價於[a-za-z]

[:blank:]    空格或製表符,等價於[\t ]

[:cntrl:]    ascii控制字元(ascii0-31,再加上ascii127)

[:digit:]    任何乙個數字,等價於[0-9]

[:graph:]    跟[:print:]一樣,但不包括空格

[:lower:]    任何乙個小寫字母,等價於[a-z]

[:print:]    任何乙個可列印字元

[:punct:]    既不屬於[:alnum:],也不屬於[:cntrl:]的任何乙個字元

[:space:]    任何乙個空白字元,包括空格,等價於[\f\n\r\t\v ]

[:upper:]    任何乙個大寫字母,等價於[a-z]

[:xdigit:]   任何乙個16進製制數字,等價於[a-fa-f0-9]

使用時注意[0-9] == [[:digit:]],posix字元類,必須是[[ ]] 括起來的。

這個結果跟上面的那個用\d的效果一樣,也是前3行的數字都高亮了。

本篇文章,就簡單地先介紹一下正規表示式的簡單應用,改天再寫一篇高階版。

正規表示式 單字元匹配

正規表示式 單字元匹配 匹配任意1個字元 除了 n 匹配 中列舉的字元 ab456c a za z d 匹配數字,即0 9 d 匹配非數字,即不是數字 s 匹配空白,即 空格,tab鍵 t,n s 匹配非空白 w 匹配單詞字元,即a z a z 0 9 國家的文字 w 匹配非單詞字元 匹配任意乙個數...

Python 正規表示式筆記(2)單字元匹配

正規表示式的單字元匹配 字元功能 匹配任意1個字元 除了 n 匹配 中列舉的字元 d匹配任意1個 數字,即0 9 d匹配任意 1個非數字,即不是數字 s匹配任意 1個空白,即 空格,tab鍵 s匹配任意 1個非空白 w匹配任意 1個單詞字元,即a z a z 0 9 w匹配任意 1個非單詞字元 co...

正規表示式入門之字元匹配

在前段時間進行文字挖掘練習的時候,不會使用正規表示式,深感不宜。所以這裡,我想趕緊學習一下正規表示式。注 本文是對 正規表示式必知必會 的複習。正規表示式是一些用來匹配和處理文字的字串,正規表示式語言用來構造正規表示式 最終構造出的字串就成為正規表示式 正規表示式語言並不是一種完備的程式語言,它甚至...