正規表示式示例

2021-08-09 15:45:05 字數 3438 閱讀 3633

正規表示式的最簡單形式是在搜尋字串中匹配其本身的單個普通字元。例如,單字元模式,如 a,不論出現在搜尋字串中的何處,它總是匹配字母 a。下面是一些單字元正規表示式模式的示例:

/a//7

//m/

可以將許多單字元組合起來以形成大的表示式。例如,以下正規表示式組合了單字元表示式:a、7 和 m。

/a7m/
請注意,沒有串聯運算子。只須在乙個字元後面鍵入另乙個字元。

句點 (.) 匹配字串中的各種列印或非列印字元,只有乙個字元例外。這個例外就是換行符 (\n)。下面的正規表示式匹配 aac、abc、acc、adc 等等,以及 a1c、a2c、a-c 和 a#c:

/a.c/
若要匹配包含檔名的字串,而句點 (.) 是輸入字串的組成部分,請在正規表示式中的句點前面加反斜扛 (\) 字元。舉例來說明,下面的正規表示式匹配 filename.ext:

/filename\.ext/
這些表示式只讓您匹配"任何"單個字元。可能需要匹配列表中的特定字元組。例如,可能需要查詢用數字表示的章節標題(chapter 1、chapter 2 等等)。

若要建立匹配字元組的乙個列表,請在方括號([ 和 ])內放置乙個或更多單個字元。當字元括在中括號內時,該列表稱為"中括號表示式"。與在任何別的位置一樣,普通字元在中括號內表示其本身,即,它在輸入文字中匹配一次其本身。大多數特殊字元在中括號表示式內出現時失去它們的意義。不過也有一些例外,如:

括在中括號表示式中的字元只匹配處於正規表示式中該位置的單個字元。以下正規表示式匹配 chapter 1、chapter 2、chapter 3、chapter 4 和 chapter 5:

/chapter [12345]/
請注意,單詞 chapter 和後面的空格的位置相對於中括號內的字元是固定的。中括號表示式指定的只是匹配緊跟在單詞 chapter 和空格後面的單個字元位置的字符集。這是第九個字元位置。

若要使用範圍代替字元本身來表示匹配字元組,請使用連字元 (-) 將範圍中的開始字元和結束字元分開。單個字元的字元值確定範圍內的相對順序。下面的正規表示式包含範圍表示式,該範圍表示式等效於上面顯示的中括號中的列表。

/chapter [1-5]/
當以這種方式指定範圍時,開始值和結束值兩者都包括在範圍內。注意,還有一點很重要,按 unicode 排序順序,開始值必須在結束值的前面。

若要在中括號表示式中包括連字元,請採用下列方法之一:

若要查詢不在列表或範圍內的所有字元,請將插入符號 (^) 放在列表的開頭。如果插入字元出現在列表中的其他任何位置,則它匹配其本身。下面的正規表示式匹配1、2、3、4 或 5 之外的任何數字和字元:

/chapter [^12345]/
在上面的示例中,表示式在第九個位置匹配 1、2、3、4 或 5 之外的任何數字和字元。這樣,例如,chapter 7 就是乙個匹配項,chapter 9 也是乙個匹配項。

上面的表示式可以使用連字元 (-) 來表示:

/chapter [^1-5]/
中括號表示式的典型用途是指定任何大寫或小寫字母或任何數字的匹配。下面的表示式指定這樣的匹配:

/[a-za-z0-9]/
替換使用 | 字元來允許在兩個或多個替換選項之間進行選擇。例如,可以擴充套件章節標題正規表示式,以返回比章標題範圍更廣的匹配項。但是,這並不象您可能認為的那樣簡單。替換匹配 | 字元任一側最大的表示式。

您可能認為,下面的表示式匹配出現在行首和行尾、後面跟乙個或兩個數字的 chapter 或 section:

/^chapter|section [1-9][0-9]$/
很遺憾,上面的正規表示式要麼匹配行首的單詞 chapter,要麼匹配行尾的單詞 section 及跟在其後的任何數字。如果輸入字串是 chapter 22,那麼上面的表示式只匹配單詞 chapter。如果輸入字串是 section 22,那麼該表示式匹配 section 22。

若要使正規表示式更易於控制,可以使用括號來限制替換的範圍,即,確保它只應用於兩個單詞 chapter 和 section。但是,括號也用於建立子表示式,並可能捕獲它們以供以後使用,這一點在有關反向引用的那一節講述。通過在上面的正規表示式的適當位置新增括號,就可以使該正規表示式匹配 chapter 1 或 section 3。

下面的正規表示式使用括號來組合 chapter 和 section,以便表示式正確地起作用:

/^(chapter|section) [1-9][0-9]$/
儘管這些表示式正常工作,但 chapter|section 周圍的括號還將捕獲兩個匹配字中的任乙個供以後使用。由於在上面的表示式中只有一組括號,因此,只有乙個**獲的"子匹配項"。

在上面的示例中,您只需要使用括號來組合單詞 chapter 和 section 之間的選擇。若要防止匹配被儲存以備將來使用,請在括號內正規表示式模式之前放置 ?:。下面的修改提供相同的能力而不儲存子匹配項:

/^(?:chapter|section) [1-9][0-9]$/
除 ?: 元字元外,兩個其他非捕獲元字元建立被稱為"**先行"匹配的某些內容。正向**先行使用 ?= 指定,它匹配處於括號中匹配正規表示式模式的起始點的搜尋字串。反向**先行使用 ?! 指定,它匹配處於與正規表示式模式不匹配的字串的起始點的搜尋字串。

例如,假設您有乙個文件,該文件包含指向 windows 3.1、windows 95、windows 98 和 windows nt 的引用。再進一步假設,您需要更新該文件,將指向 windows 95、windows 98 和 windows nt 的所有引用更改為 windows 2000。下面的正規表示式(這是乙個正向**先行的示例)匹配 windows 95、windows 98 和 windows nt:

/windows(?=95 |98 |nt )/
下面列出一些正規表示式示例:

正規表示式

描述/\b([a-z]+) \1\b/gi

乙個單詞連續出現的位置。

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

將乙個url解析為協議、域、埠及相對路徑。

/^(?:chapter|section) [1-9][0-9]$/

定位章節的位置。

/[-a-z]/

a至z共26個字母再加乙個-號。

/ter\b/

可匹配chapter,而不能匹配terminal。

/\bapt/

可匹配chapter,而不能匹配aptitude。

/windows(?=95 |98 |nt )/

可匹配windows95或windows98或windowsnt,當找到乙個匹配後,從windows後面開始進行下一次的檢索匹配。

/^\s*$/

匹配空行。

/\d-\d/

驗證由兩位數字、乙個連字元再加 5 位數字組成的 id 號。

/<\s*(\s+)(\s[^>]*)?>[\s\s]*<\s*\/\1\s*>/

匹配 html 標記。

正規表示式示例

表示式匹配 s 匹配空行。d d 驗證由兩位數字 乙個連字元再加 5 位數字組成的 id 號。s s s s s s 1 s 匹配 html 標記。下表包含了元字元的完整列表以及它們在正規表示式上下文中的行為 字元說明 將下一字元標記為特殊字元 文字 反向引用或八進位制轉義符。例如,n 匹配字元 n...

正規表示式示例

匹配 s 匹配空行。d d 驗證由兩位數字 乙個連字元再加 5 位數字組成的 id 號。s s s s s s 1 s 匹配 html 標記。下表包含了元字元的完整列表以及它們在正規表示式上下文中的行為 說明 將下一字元標記為特殊字元 文字 反向引用或八進位制轉義符。例如,n 匹配字元 n n 匹配...

正規表示式 示例

正規表示式的最簡單形式是在搜尋字串中匹配其本身的單個普通字元。例如,單字元模式,如 a,不論出現在搜尋字串中的何處,它總是匹配字母 a。下面是一些單字元正規表示式模式的示例 a 7 m 可以將許多單字元組合起來以形成大的表示式。例如,以下正規表示式組合了單字元表示式 a 7 和 m。a7m 請注意,...