正則表達符號

2021-06-16 02:59:38 字數 2629 閱讀 5280

元字元 描述

匹配任何單個字元。例如正規表示式r.t匹配這些字串:rat、rut、r t,但是不匹配root。

匹配行結束符。例如正規表示式weasel$ 能夠匹配字串"he's a weasel"的末尾,但是不能匹配字串"they are a bunch of weasels."。

匹配一行的開始。例如正規表示式^when in能夠匹配字串"when in the course of human events"的開始,但是不能匹配"what and when in the"。

匹配0或多個正好在它之前的那個字元。例如正規表示式.*意味著能夠匹配任意數量的任何字元。

這是引用符,用來將這裡列出的這些元字元當作普通的字元來進行匹配。例如正規表示式/$被用來匹配美元符號,而不是行尾,類似的,正規表示式/.用來匹配點字元,而不是任何字元的萬用字元。

[c1-c2]

[^c1-c2]

匹配括號中的任何乙個字元。例如正規表示式r[aou]t匹配rat、rot和rut,但是不匹配ret。可以在括號中使用連字元-來指定字元的區間,例如正規表示式[0-9]可以匹配任何數字字元;還可以制定多個區間,例如正規表示式[a-za-z]可以匹配任何大小寫字母。另乙個重要的用法是「排除」,要想匹配除了指定區間之外的字元——也就是所謂的補集——在左邊的括號和第乙個字元之間使用^字元,例如正規表示式[^269a-z] 將匹配除了2、6、9和所有大寫字母之外的任何字元。

匹配詞(word)的開始(/<)和結束(/>)。例如正規表示式/將 /( 和 /) 之間的表示式定義為「組」(group),並且將匹配這個表示式的字元儲存到乙個臨時區域(乙個正規表示式中最多可以儲存9個),它們可以用 到 的符號來引用。

將兩個匹配條件進行邏輯「或」(or)運算。例如正規表示式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:這個元字元不是所有的軟體都支援的。

匹配1或多個正好在它之前的那個字元。例如正規表示式9+匹配9、99、999等。注意:這個元字元不是所有的軟體都支援的。

匹配0或1個正好在它之前的那個字元。注意:這個元字元不是所有的軟體都支援的。//

匹配指定數目的字元,這些字元是在它之前的表示式定義的。例如正規表示式a[0-9]/ 能夠匹配字元"a"後面跟著正好3個數字字元的串,例如a123、a348等,但是不匹配a1234。而正規表示式[0-9]/ 匹配連續的任意4個、5個或者6個數字字元。注意:這個元字元不是所有的軟體都支援的。

最簡單的元字元是點,它能夠匹配任何單個字元(注意不包括新行符)。假定有個檔案test.txt包含以下幾行內容:

he is a rat

he is in a rut

the food is rotten

i like root beer

我們可以使用grep命令來測試我們的正規表示式,grep命令使用正規表示式去嘗試匹配指定檔案的每一行,並將至少有一處匹配表示式的所有行顯示出來。命令

grep r.t test.txt

在test.txt檔案中的每一行中搜尋正規表示式r.t,並列印輸出匹配的行。正規表示式r.t匹配乙個r接著任何乙個字元再接著乙個t。所以它將匹配檔案中的rat和rut,而不能匹配rotten中的rot,因為正規表示式是大小寫敏感的。要想同時匹配大寫和小寫字母,應該使用字元區間元字元(方括號)。正規表示式[rr]能夠同時匹配r和r。所以,要想匹配乙個大寫或者小寫的r接著任何乙個字元再接著乙個t就要使用這個表示式:[rr].t。

要想匹配行首的字元要使用抑揚字元(^)——又是也被叫做插入符。例如,想找到text.txt中行首"he"打頭的行,你可能會先用簡單表示式he,但是這會匹配第三行的the,所以要使用正規表示式^he,它只匹配在行首出現的h。

有時候指定「除了×××都匹配」會比較容易達到目的,當抑揚字元(^)出現在方括號中是,它表示「排除」,例如要匹配he ,但是排除前面是t or s的情性(也就是the和she),可以使用:[^st]he。

可以使用方括號來指定多個字元區間。例如正規表示式[a-za-z]匹配任何字母,包括大寫和小寫的;正規表示式[a-za-z][a-za-z]* 匹配乙個字母後面接著0或者多個字母(大寫或者小寫)。當然我們也可以用元字元+做到同樣的事情,也就是:[a-za-z]+ ,和[a-za-z][a-za-z]*完全等價。但是要注意元字元+ 並不是所有支援正規表示式的程式都支援的。關於這一點可以參考後面的正規表示式語法支援情況。

要指定特定數量的匹配,要使用大括號(注意必須使用反斜槓來轉義)。想匹配所有100和1000的例項而排除10和10000,可以使用:10/,這個正規表示式匹配數字1後面跟著2或者3個0的模式。在這個元字元的使用中乙個有用的變化是忽略第二個數字,例如正規表示式0/ 將匹配至少3個連續的0。

簡單的例子

這裡有一些有代表性的、比較簡單的例子。

vi 命令 作用

:%s/ */ /g 把乙個或者多個空格替換為乙個空格。

:%s/ *$// 去掉行尾的所有空格。

:%s/^/ / 在每一行頭上加入乙個空格。

:%s/^[0-9][0-9]* // 去掉行首的所有數字字元。

:%s/b[aeio]g/bug/g 將所有的bag、beg、big和bog改為bug。

:%s/t/([aou]/)g/ht/g 將所有tag、tog和tug分別改為hat、hot和hug(注意用group的用法和使用引用前面被匹配的字元)。

正規表示式符號

字元描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

正規表示式符號

字元描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

正規表示式符號

字元 描述 標記下乙個字元是特殊字元或文字。例如,n 和字元 n 匹配。n 則和換行字元匹配。序列 和 匹配,而 則和 匹配。匹配輸入的開頭。匹配輸入的末尾。匹配前乙個字元零或多次。例如,zo 與 z 或 zoo 匹配。匹配前乙個字元一次或多次。例如,zo 與 zoo 匹配,但和 z 不匹配。匹配前...