正則表達式是簡明而靈活的表示法,用於查找和替換各種模式的文本。在 SQL Server Management Studio 的“查找和替換”對話框中的“查找內容”字段中,可以使用一組特定的正則表達式。
使用正則表達式進行查找
-
若要在“快速查找”、“在文件中查找”、“快速替換”或 “在文件中替換” 操作過程中,在“查找內容”字段啟用正則表達式,請在“查找選項”下選中“使用”,再選擇“正則表達式”。
-
“查找內容”字段旁邊的“引用列表”三角形按鈕將變為可用狀態。單擊此按鈕可顯示一組最常用的正則表達式。如果選擇了表達式生成器中的某個項,則可將該項插入“查找內容”字符串。
![]() |
---|
“查找內容”字符串中使用的正則表達式與 Microsoft .NET Framework 編程中的有效正則表達式相比,語法上存在差異。例如,在“查找和替換”對話框中,大括號 {} 用於表示帶標記的表達式。所以,表達式“zo{1}”將匹配所有“zo”后帶標記 1 的匹配項,如“Alonzo1”和“Gonzo1”。但在 .NET Framework 中,{} 符號用於表示量詞。因此,表達式“zo{1}”將匹配所有“z”后跟一個“o”的匹配項,如匹配“zone”,但不匹配“zoo”。 |
下表對“引用列表”中提供的正則表達式進行了說明。
表達式 |
語法 |
說明 |
---|---|---|
任何單個字符 |
. |
匹配除換行符外的所有單一字符。 |
零個或更多 |
* |
匹配零或更多前導表達式的匹配項,執行所有可能的匹配。 |
一個或更多 |
+ |
匹配至少一個前導表達式的匹配項。 |
行首 |
^ |
僅匹配行首位置的字符串。 |
行尾 |
$ |
僅匹配行尾位置的字符串。 |
字首 |
< |
僅匹配文本中以此開頭的字。 |
字尾 |
> |
僅匹配文本中以此結尾的字。 |
分行符 |
\n |
匹配與平台無關的換行符。在替換表達式中,插入一個換行符。 |
在集合中的任何一個字符 |
[] |
匹配 [] 中的任何一個字符。若要指定字符范圍,請列出起始字符和結束字符,並用短划線 (-) 分隔,如 [a-z]。 |
不在集合中的任何一個字符 |
[^...] |
匹配不在 ^ 之后的字符集中的任何一個字符。 |
或 |
| |
匹配“或”符號 (|) 兩旁的任一表達式。常用於組中。例如,(sponge|mud) bath 可以匹配“sponge bath”和“mud bath”。 |
Escape |
\ |
將反斜杠 (\) 后的字符作為文字匹配。此表達式允許您搜索正則表達式標記中使用的符號,如 { 和 ^。例如, \^ 可用於查找字符 ^。 |
標記表達式 |
{} |
匹配用括起來的表達式內的文本。 |
C/C++ 標識符 |
:i |
匹配表達式 ([a-zA-Z_$][a-zA-Z0-9_$]*)。 |
用引號括起來的字符串 |
:q |
匹配表達式 (("[^"]*")|('[^']*'))。 |
空格或制表符 |
:b |
匹配空格或制表符。 |
整數 |
:z |
匹配表達式 ([0-9]+)。 |
“引用列表”中只列出了部分可在“查找和替換”操作中使用的正則表達式。還可以將下列任一正則表達式插入“查找內容”字符串:
表達式 |
語法 |
說明 |
---|---|---|
最少 - 零個或更多 |
@ |
匹配零個或更多前導表達式的匹配項,匹配盡可能少的字符。 |
最少 - 一個或更多 |
# |
匹配一個或更多前導表達式的匹配項,匹配盡可能少的字符。 |
重復 n 次 |
^n |
匹配前導表達式的 n 個匹配項。例如,[0-9]^4 匹配所有四位數序列。 |
分組 |
() |
將子表達式分組 |
第 n 個標記文本 |
\n |
在“查找或替換”表達式中,指示匹配第 n 個標記表達式的文本,其中 n 為 1 到 9 之間的數字。 在“替換”表達式中,\0 將插入完整的匹配文本。 |
右對齊字段 |
\(w,n) |
在“替換”表達式中,在寬度至少為 w 個字符的字段中,右對齊第 n 個標記表達式。 |
左對齊字段 |
\(-w,n) |
在“替換”表達式中,在寬度至少為 w 個字符的字段中,左對齊第 n 個標記表達式。 |
阻止匹配 |
~(X) |
如果在表達式的此處出現 X,則阻止匹配。例如,real~(ity) 匹配“realty”和“really”中的“real”,但不匹配“reality”中的“real”。 |
字母數字字符 |
:a |
匹配表達式 ([a-zA-Z0-9])。 |
字母字符 |
:c |
匹配表達式 ([a-zA-Z])。 |
十進制數字 |
:d |
匹配表達式 ([0-9])。 |
十六進制數 |
:h |
匹配表達式 ([0-9a-fA-F]+)。 |
有理數 |
:n |
匹配表達式 (([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+))。 |
字母字符串 |
:w |
匹配表達式 ([a-zA-Z]+)。 |
Escape |
\e |
Unicode U+001B。 |
響鈴 |
\g |
Unicode U+0007。 |
Backspace |
\h |
Unicode U+0008。 |
制表符 |
\t |
匹配制表符,Unicode U+0009。 |
Unicode 字符 |
\x#### 或 \u#### |
匹配由 Unicode 值確定的字符,其中 #### 為十六進制數字。可以使用 ISO 10646 碼位或給出代理項對值的兩個 Unicode 碼位,指定基本多語言面(即代理項)以外的字符。 |
下表列出了按標准 Unicode 字符屬性匹配時的語法。雙字母縮寫和 Unicode 字符屬性數據庫中列出的縮寫相同。可以將這些縮寫指定為字符集的一部分。例如,表達式 [:Nd:Nl:No] 匹配任何數字。
表達式 |
語法 |
說明 |
---|---|---|
大寫字母 |
:Lu |
匹配任何單個大寫字母。例如,:Luhe 匹配“The”,但不匹配“the”。 |
小寫字母 |
:Ll |
匹配任何單個小寫字母。例如,:Llhe 匹配“the”,但不匹配“The”。 |
標題大寫字母 |
:Lt |
匹配一個大寫字母后跟一個小寫字母的字符,例如 Nj 和 Dz。 |
修飾字母 |
:Lm |
匹配字母或標點符號(如逗號、交叉重音符和秒號),這些字母或標點符號是用於修飾前導字母的。 |
其他字母 |
:Lo |
匹配其他字母,如歌特字母 ahsa。 |
十進制數字 |
:Nd |
匹配十進制數字(如 0-9)及其全角對等數字。 |
字母數字 |
:Nl |
匹配字母數字,如羅馬數字和零的表意數字。 |
其他數字 |
:No |
匹配其他數字,如舊斜體數字一。 |
左標點 |
:Ps |
匹配左標點,如左小括號和左大括號。 |
右標點 |
:Pe |
匹配右標點,如右小括號和右大括號。 |
左引號 |
:Pi |
匹配左雙引號。 |
右引號 |
:Pf |
匹配單引號和右雙引號。 |
划線號 |
:Pd |
匹配划線號。 |
連接號 |
:Pc |
匹配下划線符號。 |
其他標點 |
:Po |
匹配 (,)、?、"、!、@、#、%、&、*、\、(:)、(;)、' 和 /。 |
空格分隔符 |
:Zs |
匹配空格。 |
行分隔符 |
:Zl |
匹配 Unicode 字符 U+2028。 |
段落分隔符 |
:Zp |
匹配 Unicode 字符 U+2029。 |
不占位標記 |
:Mn |
匹配不占位標記。 |
合並標記 |
:Mc |
匹配合並標記。 |
封閉標記 |
:Me |
匹配封閉標記。 |
數學符號 |
:Sm |
匹配 +、=、~、|、< 和 >。 |
貨幣符號 |
:Sc |
匹配 $ 和其他貨幣符號。 |
修飾符號 |
:Sk |
匹配修飾符號,如抑揚符、重音符和長音符。 |
其他符號 |
:So |
匹配其他符號,如版權符號、段落標記和度數符號。 |
其他控制 |
:Cc |
匹配行尾。 |
其他格式 |
:Cf |
格式化控制字符,如雙向控制字符。 |
代理項 |
:Cs |
匹配代理項對的一半。 |
其他專門用途 |
:Co |
匹配任何專用區域的字符。 |
其他未分配字符 |
:Cn |
匹配未映射到 Unicode 字符的字符。 |
除了標准的 Unicode 字符屬性以外,還可以將下列附加屬性指定為字符集的一部分。
表達式 |
語法 |
說明 |
---|---|---|
字母 |
:Al |
匹配任何單字符。例如,:Alhe 匹配“The”、“then” 和“reached”之類的字。 |
Numeric |
:Nu |
匹配任何數字。 |
標點 |
:Pu |
匹配任意一個標點符號,如 ?、@、' 等等。 |
空格 |
:Wh |
匹配任何類型的空格,包括印刷空格和表意空格。 |
雙向 |
:Bi |
匹配自右至左書寫的字符,如阿拉伯語和希伯萊語字符。 |
朝鮮文字 |
:Ha |
匹配朝鮮文字字母和組合字母。 |
平假名 |
:Hi |
匹配平假名字符。 |
片假名 |
:Ka |
匹配片假名字符。 |
象形/漢字/日文漢字 |
:Id |
匹配象形字符,如漢字和日文漢字。 |
用於查找文本的正則表達式
通過使用正則表達式,可以在 Microsoft Expression Web 中執行繁復的查找和替換操作。如果您不知道所要查找的確切文本或代碼,或者要查找文本或代碼字符串的多個匹配項,則可以使用正表達式。
正則表達式是一種文本模式,它可以描述所要查找的文本的一種或多種變體。正則表達式由特定字符(如字母“a”到“z”)和描述文本模式的特殊字符(如星號“*”)組成。例如,要在網站中查找“page”的所有變體,可以搜索“page*”。這樣,Expression Web 將在網站中查找“page”、“pages”、“pager”以及以“page”開頭的任何其他單詞的所有實例。
在搜索中使用正則表達式時,特定的規則將控制哪些字符組合將執行特定的匹配操作。每種正則表達式(或正則表達式的組合)都稱為“語法”。可以在一個語法中使用多個正則表達式以精確匹配要搜索的目標。
若要使用正則表達式,請參閱使用查找和替換編輯多個網頁。
正則表達式語法
語法 | 表達式說明 |
---|---|
. |
任意字符 用作換行符 (\n) 以外的任何單個打印或非打印字符的通配符。 例如,正則表達式 c.t 可匹配 cat、c t、cot 等字符串,但不能匹配 cost。在本例中,句點 (.) 是一個代表單個字符的通配符。它出現在字母“c”和“t”之間,因此字符“c”和“t”之間的任何單個字符都與表達式匹配 - 即使是空格也一樣。 |
* |
最大為零或更多 用於匹配在此表達式之前出現零次或更多次的某個字符,可與盡可能多的字符相匹配。 正則表達式 .* 用於匹配某個出現零次或更多次的字符。 例如,正則表達式 b.*k 可匹配 book、back、black、blank 和 buck。在本例中,將句點 (.) 和星號 (*) 組合成一個語法。句號 (.) 緊挨在星號 (*) 表達式之前。星號 (*) 可匹配“b”和“k”之間任意出現零次或更多次的字符。句點 (.) 用作“b”和“k”之間字符的通配符。在本例中,它表示“b”和“k”之間的任意字符都可以反復出現。 |
+ |
最大為一或更多 用於匹配在此表達式之前出現一次或更多次的某個字符,可與盡可能多的字符相匹配。 正則表達式 .+ 用於匹配某個出現一次或更多次的字符。 例如,正則表達式 bo+. 可匹配 bob、book 和 boot。在本例中,將句點 (.) 和加號 (+) 組合成一個語法。句號 (.) 緊挨在加號 (+) 表達式之后。加號 (+) 可與出現一次或更多次的字母“o”相匹配。句點 (.) 用作每個單詞的最后一個字符的通配符。在本例中,該字符為“b”、“k”和“t”。 |
@ |
最小為零或更多 用於匹配在此表達式之前出現零次或更多次的某個字符,可與盡可能少的字符相匹配。 正則表達式 .@ 用於匹配某個出現零次或更多次的字符。 例如,正則表達式 a.@x 可匹配“abxbxb”中的“abx”和“acxcxc”中的“acx”。在本例中,將句號 (.) 和 @ 符號組合成一個語法。句點 (.) 緊挨在 @ 符號表達式之前。@ 符號可與“a”和“x”之間出現零次或更多次的任意字符相匹配。在本例中,句點 (.) 用作字符“a”和“x”之間的字符“b”和“c”的通配符。 |
# |
最小為一或更多 用於匹配在此表達式之前出現一次或更多次的某個字符,可與盡可能少的字符相匹配。 例如,正則表達式 si.#er 可匹配“sicker”或“silkier”。在本例中,將句號 (.) 和井號 (#) 組合成一個語法。句點 (.) 緊挨在井號 (#) 表達式之前。井號 (#) 可與“si”和“er”之間出現一次或更多次的任意字符相匹配。句點 (.) 用作單詞 sicker 中字符“c”和“k”的通配符,以及單詞 silkier 中“l”、“k”和“i”的通配符。 |
[ ] |
字符集 用於匹配括號 ([ ]) 內的任意一個字符。可以使用連字符 (-) 指定字符的范圍,例如 [a-z]。 例如:
|
^ |
行首 定位於行首匹配。 例如,正則表達式 ^When in 匹配以“When in”開頭且出現於行首的任意字符串,例如“When in the course of human events”或“When in town, call me”。然而,此正則表達式不匹配出現於行首的“What and when in the course of human events”。 |
$ |
行尾 定位於行尾匹配。 例如,正則表達式 professional$ 可匹配字符串“He is a professional”,但不能匹配字符串“They are a group of professionals”。 |
^^ |
文件開頭 定位於文件開頭匹配。僅適用於在源代碼或文本文件中搜索文本。 例如,若要匹配文件開頭的第一個 HTML 標記,請使用此正則表達式:^^ |
$$ |
文件末尾 定位於文件末尾匹配。僅適用於在源代碼或文本文件中搜索文本。 例如,若要匹配文件末尾的最后一個 HTML 標記(標記后沒有空格),可使用此正則表達式:$$ |
| |
或 表示在兩項之間進行選擇,即匹配“或”符號 (|) 前面或后面的表達式。 例如,正則表達式 (him|her) 匹配下列各項:“it belongs to him”或者“it belongs to her”但不匹配行“it belongs to them”。 |
\ |
轉義特殊字符 用於匹配反斜線 (\) 后面的字符。這樣,就可以查找正則表達式語法中使用的字符(如左大括號 ({) 或脫字號 (^))或其他一些特殊字符。 例如,使用 \$ 可匹配美元符號 ($) 字符,而不是執行用於“定位於行尾”的正則表達式。同樣,使用 \. 可匹配句號 (.) 字符,而不是像句號 (.) 正則表達式一樣匹配任意一個字符。 |
{} |
標記表達式 對與括號內表達式匹配的文本加標記。可以使用 \N 在“查找”表達式中匹配出現在另一處的標記文本或者將標記文本插入“替換”表達式。 例如,假設要查找連續出現兩次的單詞。若要搜索,請使用此表達式:{.#} \1 假設連續出現的單詞由一個空格隔開,則需要在右大括號 (}) 與反斜線 (\) 之間添加一個空格。 在本例中,將井號 (#)、句號 (.) 和大括號 ({}) 組合成一個語法。在此表達式中,.# 表示任何連續的字符。因為這部分表達式位於大括號 ({}) 內,所以連續的字符將被加上標記,並被引用為 \1。此表達式將查找后跟空格以及字符與其完全相同的任意連續字符。 |
\N |
第 N 個標記表達式 在“查找”表達式中,\N 匹配由第 N 個標記表達式指定的文本,其中 N 是 1 到 9 的數字。 在“替換”表達式中,\N 插入由第 N 個標記表達式匹配的文本,其中 N 是 1 到 9 之間的數字。\0 插入整個“查找”表達式指定的文本。 例如,假設要查找連續出現兩次的單詞,並使用一個單詞替換它們。若要搜索,請使用此表達式:.#} \l 假設連續出現的單詞由一個空格隔開,則需要在右大括號 (}) 與反斜線 (\) 之間添加一個空格。在本例中,將井號 (#)、句號 (.) 和大括號 ({}) 組合成一個語法。 若要替換,請使用下列表達式:\l \1 表示在查找字符串中的第一對大括號內找到的內容。通過在替換操作中使用 \1,實際上是將連續出現兩次的單詞替換為一個單詞。 |
( ) |
組表達式 標記子表達式的開始和結束。 子表達式指括在 ( ) 中的正則表達式,例如表達式:(ha)+。在本例中,將加號 (+) 與括號 ( ) 組表達式組合成一個語法。子表達式是 (ha),因為它括在括號 ( ) 內。添加加號 (+) 后,該表達式可查找重復的字母對。加號 (+) 表示“ha”出現一次或更多次。 此表達式可匹配下列各項:“haha”和“hahaha”。 |
~x |
防止匹配 當 x 出現在表達式中的此位置時會防止匹配。 例如,正則表達式 real~(ity) 可匹配“realty”和“really”中的“real”,但不能匹配“reality”中的“real”。 |
\n |
換行符 用於匹配“代碼”視圖中的新行,或“設計”視圖中的 <br>。 語法 (\n) 是匹配所有換行符的簡便方法。 |
\t |
制表符 用於匹配單個制表符。 例如,如果要查找所有位於行首的制表符,可使用此正則表達式: ^\t+ 在本例中,將脫字號 (^)、加號 (+) 和制表符 (\t) 組合成一個語法。脫字號 (^) 位於單個制表符表達式之前,用於匹配位於行首的所有制表符。加號 (+) 表示匹配一個或多個制表符。 |
[^] |
任何一個不屬於該集合的字符 用於匹配不包含在脫字號 (^) 之后的字符集內的任何字符。 例如,若要匹配范圍之外的任何字符,可使用脫字號 (^) 作為左括號后面的第一個字符。表達式 [^269A-Z] 匹配除 2、6、9 以及任何大寫字母之外的所有字符。 |
n |
重復表達式 用於匹配脫字號 (^) 之前出現 n 次的表達式。 例如,若 n 為 4,表達式 [0-9]^4 匹配任何 4 位數序列。在本例中,將字符集 ([ ]) 語法與重復 (^n) 語法組合,以展示正則表達式的更實用的方法。 |
:a |
字母數字字符 用於匹配表達式 [a-zA-Z0-9]。 可以使用表達式 [a-zA-Z0-9] 匹配出現一次的字母(大寫或小寫)或數字。也稱為“字母數字匹配項”。可使用簡寫表達式 :a 來代替 [a-zA-Z0-9]。 |
:b |
空格 用於匹配代碼或文本中的任何空格。 例如,若要匹配行首的單個空格字符,請使用此正則表達式:^:b |
:c |
字母字符 用於匹配表達式 [a-zA-Z]。使用此表達式時,可以匹配所有大寫或小寫字母。 可以使用簡寫表達式 :c 來代替所有 [a-zA-Z]。 |
:d |
十進制數 用於匹配表達式 [0-9]。利用此表達式可以匹配任何數字。 例如,假設要在文本文件中查找美國的社會福利號。美國的社會福利號的格式為 999-99-9999。:d^3-:d^2-:d^4 或 [0-9]^3-[0-9]^2-[0-9]^4(使用 [0-9] 表示)可返回相同的結果。 可使用簡寫表達式 :d 來代替所有 [0-9]。 |
:h |
十六進制數 用於匹配表達式 [0-9a-fA-F]+ 使用此表達式可匹配由“A”和“F”之間的大寫或小寫字母和任意數字組成的十六進制數。 例如,假設網站中的網頁使用了多種不同的背景色,而您要將這些網頁的顏色改為黑色(即 000000)。但是,您不知道現有顏色的十六進制值。使用此正則表達式可查找所有的現有十六進制值: \#:h 可以使用 [0-9a-fA-F] 進行搜索,但在本例中,將反斜線 (\)、井號 (#) 和十六進制數字 (:h) 語法組合在一起。\# 匹配非表達式的井號 (#),而 :h 匹配任何十六進制字符序列。 若要替換現有十六進制數值,可鍵入所需背景顏色的十六進制數值: 000000 |
:i |
標識符 用於匹配表達式 [a-zA-Z_$][a-zA-Z0-9_$]* 處理代碼時,如果需要匹配所有程序標識符,可使用簡寫表達式 :i,而無需鍵入上述冗長的表達式。 |
:n |
有理數 用於匹配表達式 ([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)|([0-9]+) 如果需要匹配帶小數點的整個數值,可使用簡寫表達式 :n,而無需鍵入上述冗長的表達式。 |
:q |
帶引號的字符串 用於匹配表達式 ("[~"]*")|('[~']*') 如果需要匹配加引號的所有引號,可使用簡寫表達式 :q,而無需鍵入上述冗長的表達式。 |
:w |
字母字符串 用於匹配表達式 [a-zA-Z]+ 此語法是一種可匹配一個或多個大寫或小寫字母字符的簡便方法。 |
:z |
整數 用於匹配表達式 [0-9]+ 此語法是一種可匹配任何整數的簡便方法。
|