正規表示式基礎

2021-05-06 13:49:31 字數 4317 閱讀 3112

元字元 描述

匹配任何單個字元。例如正規表示式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個數字字元。注意:這個元字元不是所有的軟體都支援的。

元字元

現在你已經知道幾個很有用的元字元了,如/b,.,*,還有/d.當然還有更多的元字元,比如/s匹配任意的空白符,包括空格,製表符(tab),換行符,中文全形空格等。/w匹配字母或數字或下劃線或漢字。

/ba/w*/b匹配以字母a開頭的單詞——先是某個單詞開始處(/b),然後是字母a,然後是任意數量的字母或數字(/w*),最後是單詞結束處(/b)(好吧,現在我們說說這裡的單詞是什麼意思吧:就是幾個連續的/w。不錯,這與學習英文時要背的成千上萬個同名的東西的確關係不大)。

/d+匹配1個或更多連續的數字。這裡的+是和*類似的元字元,不同的是*匹配重複任意次(可能是0次),而+則匹配重複1次或更多次。

/b/w/b匹配剛好6個字母/數字的單詞。

常用的元字元 **

說明.匹配除換行符以外的任意字元

/w匹配字母或數字或下劃線或漢字

/s匹配任意的空白符

/d匹配數字

/b匹配單詞的開始或結束

^匹配字串的開始

$匹配字串的結束

元字元^(和6在同乙個鍵位上的符號)以及$和/b有點類似,都匹配乙個位置。^匹配你要用來查詢的字串的開頭,$匹配結尾。這兩個**在驗證輸入的內容時非常有用,比如乙個**如果要求你填寫的qq號必須為5位到12位數字時,可以使用:^/d$。

這裡的和前面介紹過的是類似的,只不過匹配只能不多不少重複2次,則是必須重複最少5次,最多12次,否則都不匹配。

因為使用了^和$,所以輸入的整個字串都要用來和/d來匹配,也就是說整個輸入必須是5到12個數字,因此如果輸入的qq號能匹配這個正規表示式的話,那就符合要求了。

和忽略大小寫的選項類似,有些正規表示式處理工具還有乙個處理多行的選項。如果選中了這個選項,^和$的意義就變成了匹配行的開始處和結束處。

字元轉義

如果你想查詢元字元本身的話,比如你查詢.,或者*,就出現了問題:你沒法指定它們,因為它們會被解釋成其它的意思。這時你就必須使用/來取消這些字元的特殊意義。因此,你應該使用/.和/*。當然,要查詢/本身,你也得用//.

例如:www/.unibetter/.com匹配www.unibetter.com,c://windows匹配c:/windows,2/^8匹配2^8(通常這是2的8次方的書寫方式)。

重複

你已經看過了前面的*,+,,這幾個匹配重複的方式了。下面是正規表示式中所有指定重複的方式:

常用的限定符

**/語法說明*

重複零次或更多次

+重複一次或更多次

?重複零次或一次

重複n次

重複n次或更多次

重複n到m次

下面是一些使用重複的例子:

windows/d+匹配windows後面跟1個或更多數字

13/d匹配以13後面跟9個數字(中國的手機號)

^/w+匹配一行的第乙個單詞(或整個字串的第乙個單詞,具體匹配哪個意思得看選項設定)

要想查詢數字,字母或數字,空白是很簡單的,因為已經有了對應這些字符集的元字元,但是如果你想匹配沒有預定義元字元的字符集比如母音字母(a,e,i,o,u),怎麼辦?

很簡單,你只需要在中括號裡列出它們就行了,像[aeiou]就匹配任何乙個母音字母,[.?!]匹配標點符號(.或?或!)(英文語句通常只以這三個標點結束)。注意,我們不需要寫成[/./?!]。

我們也可以輕鬆地指定乙個字元範圍,像[0-9]代表的含意與/d就是完全一致的:一位數字,同理[a-z0-9a-z_]也完全等同於/w(如果只考慮英文的話)。

下面是乙個更複雜的表示式:/(?0/d[) -]?/d。

這個表示式可以匹配幾種格式的**號碼,像(010)88886666,或022-22334455,或02912345678等。我們對它進行一些分析吧:首先是乙個轉義字元/(,它能出現0次或1次(?),然後是乙個0,後面跟著2個數字(),然後是)或-或空格中的乙個,它出現1次或不出現(?),最後是8個數字(/d)。不幸的是,它也能匹配010)12345678或(022-87654321這樣的「不正確」的格式。要解決這個問題,請在本教程的下面查詢答案。

有時需要查詢不屬於某個能簡單定義的字元類的字元。比如想查詢除了數字以外,其它任意字元都行的情況,這時需要用到反義:

常用的反義

**

**/語法

說明/w

匹配任意不是字母,數字,下劃線,漢字的字元

/s匹配任意不是空白符的字元

/d匹配任意非數字的字元

/b匹配不是單詞開頭或結束的位置

[^x]

匹配除了x以外的任意字元

[^aeiou]

匹配除了aeiou這幾個字母以外的任意字元

例子:/s+匹配不包含空白符的字串。

]+>匹配用尖括號括起來的以a開頭的字串。

好了,現在終於到了解決3位或4位區號問題的時間了。正規表示式裡的替換指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。聽不明白?沒關係,看例子:

0/d-/d|0/d-/d這個表示式能匹配兩種以連字型大小分隔的**號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)。

/(0/d/)[- ]?/d|0/d[- ]?/d這個表示式匹配3位區號的**號碼,其中區號可以用小括號括起來,也可以不用,區號與本地號間可以用連字型大小或空格間隔,也可以沒有間隔。你可以試試用替換|把這個表示式擴充套件成也支援4位區號的。

windows98|windows2000|windosxp這個例子是為了告訴你替換不僅僅能用於兩種規則,也能用於更多種規則。

我們已經提到了怎麼重複單個字元(直接在字元後面加上限定符就行了);但如果想要重複乙個字串又該怎麼辦?你可以用小括號來指定子表示式(也叫做分組),然後你就可以指定這個子表示式的重複次數了,你也可以對子表示式進行其它一些操作(後面會有介紹)。

(/d/.)/d是乙個簡單的ip位址匹配表示式。要理解這個表示式,請按下列順序分析它:/d匹配1到3位的數字,(/d/.}匹配三位數字加上乙個英文句號(這個整體也就是這個分組)重複3次,最後再加上乙個一到三位的數字(/d)。

理解這個表示式的關鍵是理解2[0-4]/d|25[0-5]|[01]?/d/d?,這裡我就不細說了,你自己應該能分析得出來它的意義。

正規表示式 1 正規表示式基礎

1.正規表示式基礎 正規表示式描述了一種字串匹配的模式,即可以使使用者通過一系列普通字元或特殊字元構建能夠明確描述文字字串的匹配模式,可以用來檢查某個字串是否含有某種子字串,將匹配的子字串做替換或者從某個字串中取出符合某個條件的子字串等。1.1 正規表示式的基本結構 乙個正規表示式就是由普通字元 如...

正規表示式基礎

限定符 d 匹配非負整數 正整數 0 0 9 1 9 0 9 匹配正整數 d 0 匹配非正整數 負整數 0 0 9 1 9 0 9 匹配負整數 d 匹配整數 d d 匹配非負浮點數 正浮點數 0 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 匹配正浮點數 d...

正規表示式基礎

正規表示式基礎 先從簡單的開始。假設你要搜尋乙個包含字元 cat 的字串,搜尋用的正規表示式就是 cat 如果搜尋對大小寫不敏感,單詞 catalog catherine sophisticated 都可以匹配。也就是說 1.1 句點符號 假設你在玩英文拼字遊戲,想要找出三個字母的單詞,而且這些單詞...