萬用字元與正規表示式

2021-07-11 07:12:34 字數 2691 閱讀 5890

正規表示式,又稱正規表示式、正規表示法、正規表示式、規則表示式、常規表示法(英語:regular expression,在**中常簡寫為regex、regexp或re),電腦科學的乙個概念。正規表示式使用單個字串來描述、匹配一系列匹配某個句法規則的字串。在很多文字編輯器裡,正規表示式通常被用來檢索、替換那些匹配某個模式的文字。

在計算機(軟體)技術中,萬用字元可用於代替字元。

以上定義**於維基百科

在linux中,正規表示式grep,awk,sed等命令都可以使用,非常方便。萬用字元是shell自帶的,在find,ls,cp等命令使用

讓我們先從簡單的開始。

ls *會列出當前目錄下所有檔案,*匹配了所有的檔名,而ls *a匹配所有a開頭的檔案。

需要注意的是,如果當前目錄下有目錄名匹配成功,會列出該目錄下所有檔案

*可以代替任意個數字元,只能代替乙個。

元字元作用

*前乙個字元匹配0次或任意多次

.匹配除了換行符以外任意乙個字元

^匹配行首。例如:^helloworld會匹配以helloworld開頭的行

$匹配行尾。例如:helloworld$會匹配以helloworld結尾的行

匹配中括號裡的任意指定的乙個字元,但只匹配乙個字元

[^]匹配除中括號以外的任意乙個字元

\轉義符,取消特殊含義

表示其前面的字元恰好出現n次

表示其前面的字元出現不小於n次

表示其前面的字元至少出現n次,最多出現m次

以上整理自慕課

舉幾個例子:

字元描述

\b匹配乙個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」可以匹配「never」中的「er」,但不能匹配「verb」中的「er」。

\b匹配非單詞邊界。「er\b」能匹配「verb」中的「er」,但不能匹配「never」中的「er」。

\cx匹配由x指明的控制字元。例如,\cm匹配乙個control-m或回車符。x的值必須為a-z或a-z之一。否則,將c視為乙個原義的「c」字元。

\d匹配乙個數字字元。等價於[0-9]。

\d匹配乙個非數字字元。等價於[^0-9]。

\f匹配乙個換頁符。等價於\x0c和\cl。

\n匹配乙個換行符。等價於\x0a和\cj。

\r匹配乙個回車符。等價於\x0d和\cm。

\s匹配任何空白字元,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。

\s匹配任何非空白字元。等價於[^ \f\n\r\t\v]。

\t匹配乙個製表符。等價於\x09和\ci。

\v匹配乙個垂直製表符。等價於\x0b和\ck。

\w匹配包括下劃線的任何單詞字元。等價於「[a-za-z0-9_]」。

\w匹配任何非單詞字元。等價於「[^a-za-z0-9_]」。

\xn匹配n,其中n為十六進製制轉義值。十六進製制轉義值必須為確定的兩個數字長。例如,「\x41」匹配「a」。「\x041」則等價於「\x04&1」。正規表示式中可以使用ascii編碼。.

\num

向後引用(back-reference)乙個子字串(substring),該子字串與正規表示式的第num個用括號圍起來的子表示式(subexpression)匹配。其中num是從1開始的正整數,其上限可能是99。例如:「(.)\1」匹配兩個連續的相同字元。

\n標識乙個八進位制轉義值或乙個向後引用。如果\n之前至少n個獲取的子表示式,則n為向後引用。否則,如果n為八進位制數字(0-7),則n為乙個八進位制轉義值。

\nm標識乙個八進位制轉義值或乙個向後引用。如果\nm之前至少有nm個獲得子表示式,則nm為向後引用。如果\nm之前至少有n個獲取,則n為乙個後跟文字m的向後引用。如果前面的條件都不滿足,若n和m均為八進位制數字(0-7),則\nm將匹配八進位制轉義值nm。

\nml

如果n為八進位制數字(0-3),且m和l均為八進位制數字(0-7),則匹配八進位制轉義值nml。

\un

**於維基百科

正規表示式測試器

我也不太懂,一般也用不到

字元描述

(pattern)

匹配pattern並獲取這一匹配的子字串。該子字串用於向後引用。所獲取的匹配可以從產生的matches集合得到,在vbscript中使用submatches集合,在jscript中則使用0…

9屬性。要匹配圓括號字元,請使用「(」或「)」。

(?:pattern)

匹配pattern但不獲取匹配的子字串,也就是說這是乙個非獲取匹配,不儲存匹配的子字串用於向後引用。這在使用或字元「(

(?=pattern)

正向肯定預查,在任何匹配pattern的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如,「windows(?=95

(?!pattern)

正向否定預查,在任何不匹配pattern的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如「windows(?!95

(?<=pattern)

反向肯定預查,與正向肯定預查類似,只是方向相反。例如,「(?<=95

(?反向否定預查,與正向否定預查類似,只是方向相反。例如「(?

一般只要記住最常用的,其他的有個印象,需要時再查。

萬用字元與正規表示式

萬用字元與正規表示式很容易混淆,首先要明白二者是不同的,個人感覺萬用字元用於linux的shell命令 如檔名相關操作 中,而正規表示式用於文字內容中的字串搜尋和替換等。萬用字元是linux系統本身就支援的,而正規表示式用於vim編輯器或awk程式,這些文字處理工具正是由於支援正規表示式才變得強大。...

萬用字元與正規表示式

萬用字元與正規表示式很容易混淆,首先要明白二者是不同的,個人感覺萬用字元用於linux的shell命令 如檔名相關操作 中,而正規表示式用於文字內容中的字串搜尋和替換等。萬用字元是linux系統本身就支援的,而正規表示式用於vim編輯器或awk程式,這些文字處理工具正是由於支援正規表示式才變得強大。...

正規表示式與萬用字元

正規表示式與萬用字元的區別 正規表示式用來在檔案中匹配符合條件的字串,正則是包含匹配,grep awk sed等都支援正則匹配 萬用字元用來匹配符合條件的檔名,萬用字元是完全匹配,ls find cp等都支援萬用字元 萬用字元?匹配乙個任意字元 匹配0個或任意多個任意字元,也就是匹配任何內容 匹配中...