1 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
在正則表達(dá)式中,有一種意義特殊的構(gòu)造,即元字符。目前已知的元字符有很多,如 *、?、+ 和 {} 字符。其他字符在正則表達(dá)式語(yǔ)言中都有特殊的含義。這些字符包括:$ ^ . [ ( | ) ] 和 \。
.(句點(diǎn)或點(diǎn))元字符是最簡(jiǎn)單但最常用的一個(gè)字符。它可匹配任何單字符。如果要指定某些模式可包含任意組合的字符,使用句點(diǎn)非常有用,但一定要在特定長(zhǎng)度范圍內(nèi)。此外,我們知道表達(dá)式將對(duì)包含在較長(zhǎng)字符串中的所有模式進(jìn)行匹配,假如只需要精確匹配模式,又該怎么辦?這在驗(yàn)證方案中經(jīng)常出現(xiàn),例如,要確保用戶輸入的郵政編碼或電話號(hào)碼的格式正確。使用 ^ 元字符可指定字符串(或行)的開(kāi)始,使用 $ 元字符可指定字符串(或行)的結(jié)束。通過(guò)將這些字符添加到模式的開(kāi)始和結(jié)束處,可強(qiáng)制模式僅匹配精確匹配的輸入字符串。如果 ^ 元字符用在方括號(hào) [ ] 指定的字符類(lèi)的開(kāi)頭,也有特殊的含義。具體內(nèi)容見(jiàn)下。
\ (反斜杠)元字符既可根據(jù)特殊含義“轉(zhuǎn)義”字符,也可指定預(yù)定義集合元字符的實(shí)例。同樣,具體內(nèi)容見(jiàn)下。為了在正則表達(dá)式中包括文字樣式的元字符,必須使用反斜杠進(jìn)行“轉(zhuǎn)義”。例如,如果要匹配以“c:\”開(kāi)始的字符串,可使用:^c:\\。注意,要使用 ^ 元字符指出字符串必須以此模式作為開(kāi)始,然后用反斜杠元字符轉(zhuǎn)義文字反斜杠。
|(管道)元字符用于交替指定,特別用于在模式中指定“此或彼”。例如,a|b 將匹配包含“a”或“b”的任何輸入內(nèi)容,這與字符類(lèi) [ab] 非常類(lèi)似。
最后,括號(hào) ( ) 用于給模式分組。它允許使用限定符讓一個(gè)完整模式出現(xiàn)多次。為了便于閱讀,或分開(kāi)匹配特定的輸入部分,可能允許分析或重新設(shè)置格式。
使用目前提供的工具可以完成很多工作。但是,要使用 [0-9] 表示模式中的每個(gè)數(shù)值數(shù)字,或(更糟)使用 [0-9a-zA-Z]表示任何字母數(shù)字字符,還有一段相當(dāng)漫長(zhǎng)的過(guò)程。為了減輕處理這些常用但冗長(zhǎng)模式的痛苦,事先定義了預(yù)定義元字符集合。正則表達(dá)式的不同實(shí)現(xiàn)定義了不同的預(yù)定義元字符集合。這些預(yù)定義元字符的標(biāo)準(zhǔn)語(yǔ)法是,在反斜杠 \ 后跟一個(gè)或多個(gè)字符。多數(shù)預(yù)定義元字符只有一個(gè)字符,它們的使用很容易,是冗長(zhǎng)字符類(lèi)的理想替代字符。以下是兩個(gè)示例:\d 匹配所有數(shù)值數(shù)字,\w 匹配所有單詞字符(字母數(shù)字加下劃線)。例外情況是一些特定字符代碼匹配,此時(shí)必須指定所匹配字符的地址,如 \u000D 將匹配 Unicode 回車(chē)符。下面列出一些最常用的字符類(lèi)及其等效的元字符。(以上內(nèi)容取自.net正則表達(dá)式)
元字符 說(shuō)明與等效字符類(lèi)
\a 匹配鈴聲(警報(bào));\u0007
\b 匹配字符類(lèi)外的字邊界,它匹配退格字符,\u0008
\t 匹配制表符,\u0009
\r 匹配回車(chē)符,\u000D
\w 匹配垂直制表符,\u000B
\f 匹配換頁(yè)符,\u000C
\n 匹配新行,\u000A
\e 匹配轉(zhuǎn)義符,\u001B
\040 匹配 3 位 8 進(jìn)制 ASCII 字符。\040 表示空格(十進(jìn)制數(shù) 32)。
\x20 使用 2 位 16 進(jìn)制數(shù)匹配 ASCII 字符。此例中,\x2- 表示空格。
\cC 匹配 ASCII 控制字符,此例中是 ctrl-C。
\u0020 使用 4 位 16 進(jìn)制數(shù)匹配 Unicode 字符。此例中 \u0020 是空格。
\* 不代表預(yù)定義字符類(lèi)的任意字符都只作為該字符本身對(duì)待。因此,\* 等同于 \x2A(是文字 *,不是 * 元字符)。
\p{name} 匹配已命名字符類(lèi)“name”中的任意字符。支持名稱(chēng)是 Unicode 組和塊范圍。例如,Ll、Nd、Z、IsGreek、IsBoxDrawing 和 Sc(貨幣)。
\p{name} 匹配已命名字符類(lèi)“name”中不包括的文本。
\w 匹配任意單詞字符。對(duì)于非 Unicode 和 ECMAScript 實(shí)現(xiàn),這等同于 [a-zA-Z_0-9]。在 Unicode 類(lèi)別中,這等同于 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]。
\W \w 的否定,等效于 ECMAScript 兼容集合 [^a-zA-Z_0-9] 或 Unicode 字符類(lèi)別 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]。
\s 匹配任意空白區(qū)域字符。等效于 Unicode 字符類(lèi) [\f\n\r\t\v\x85\p{Z}]。如果使用 ECMAScript 選項(xiàng)指定 ECMAScript 兼容方式,\s 等效于 [ \f\n\r\t\v] (請(qǐng)注意前導(dǎo)空格)。
\S 匹配任意非空白區(qū)域字符。等效于 Unicode 字符類(lèi)別 [^\f\n\r\t\v\x85\p{Z}]。如果使用 ECMAScript 選項(xiàng)指定 ECMAScript 兼容方式,\S 等效于 [^ \f\n\r\t\v] (請(qǐng)注意 ^ 后的空格)。
\d 匹配任意十進(jìn)制數(shù)字。在 ECMAScript 方式下,等效于 Unicode 的 [\p{Nd}]、非 Unicode 的 [0-9]。
\D 匹配任意非十進(jìn)制數(shù)字。在 ECMAScript 方式下,等效于 Unicode 的 [\p{Nd}]、非 Unicode 的 [^0-9]。
- 1 回答
- 0 關(guān)注
- 762 瀏覽
添加回答
舉報(bào)