正規表示式規則 三

2021-04-15 15:01:40 字數 2541 閱讀 4641

3. 其他通用規則

還有一些在各個正規表示式引擎之間比較通用的規則,在前面的講解過程中沒有提到。

3.1 表示式中,可以使用 "/***" 和 "/u***x" 表示乙個字元("x" 表示乙個十六進製制數)

形式字元範圍

/***

編號在 0 ~ 255 範圍的字元,比如:空格可以使用 "/x20" 表示

/u***x

任何字元可以使用 "/u" 再加上其編號的4位十六進製制數表示,比如:"/u4e2d"

3.2 在表示式 "/s","/d","/w","/b" 表示特殊意義的同時,對應的大寫字母表示相反的意義

表示式可匹配

/s匹配所有非空白字元("/s" 可匹配各個空白字元) /d

匹配所有的非數字字元 /w

匹配所有的字母、數字、下劃線以外的字元 /b

匹配非單詞邊界,即左右兩邊都是 "/w" 範圍或者左右兩邊都不是 "/w" 範圍時的字元縫隙

3.3 在表示式中有特殊意義,需要新增 "/" 才能匹配該字元本身的字元彙總

字元說明

匹配輸入字串的開始位置。要匹配 "^" 字元本身,請使用 "/^"

匹配輸入字串的結尾位置。要匹配 "$" 字元本身,請使用 "/$"

標記乙個子表示式的開始和結束位置。要匹配小括號,請使用 "/(" 和 "/)"

用來自定義能夠匹配 '多種字元' 的表示式。要匹配中括號,請使用 "/[" 和 "/]"

修飾匹配次數的符號。要匹配大括號,請使用 "/"

匹配除了換行符(/n)以外的任意乙個字元。要匹配小數點本身,請使用 "/."

修飾匹配次數為 0 次或 1 次。要匹配 "?" 字元本身,請使用 "/?"

修飾匹配次數為至少 1 次。要匹配 "+" 字元本身,請使用 "/+"

修飾匹配次數為 0 次或任意次。要匹配 "*" 字元本身,請使用 "/*"

左右兩邊表示式之間 "或" 關係。匹配 "|" 本身,請使用 "/|"

3.4 括號 "( )" 內的子表示式,如果希望匹配結果不進行記錄供以後使用,可以使用 "(?:***xx)" 格式

舉例1:表示式 "(?:(/w

)/1)+

" 匹配 "a bbccdd efg" 時,結果是 "bbccdd"。括號 "(?:)" 範圍的匹配結果不進行記錄,因此 "(/w)" 使用 "/1" 來引用。

3.5 常用的表示式屬性設定簡介:ignorecase,singleline,multiline,global

表示式屬性

說明ignorecase

預設情況下,表示式中的字母是要區分大小寫的。配置為 ignorecase 可使匹配時不區分大小寫。有的表示式引擎,把 "大小寫" 概念延伸至 unicode 範圍的大小寫。

singleline

預設情況下,小數點 "." 匹配除了換行符(/n)以外的字元。配置為 singleline 可使小數點可匹配包括換行符在內的所有字元。

multiline

預設情況下,表示式 "^" 和 "$" 只匹配字串的開始 ① 和結尾 ④ 位置。如:

①*********②/n

③*********④

配置為 multiline 可以使 "^" 匹配 ① 外,還可以匹配換行符之後,下一行開始前 ③ 的位置,使 "$" 匹配 ④ 外,還可以匹配換行符之前,一行結束 ② 的位置。

global

主要在將表示式用來替換時起作用,配置為 global 表示替換所有的匹配。

4. 其他提示

4.1 如果想要了解高階的正則引擎還支援那些複雜的正則語法,可參見本站 deelx 正則引擎的說明文件。

4.2 如果要要求表示式所匹配的內容是整個字串,而不是從字串中找一部分,那麼可以在表示式的首尾使用 "^" 和 "$",比如:"^/d+

$" 要求整個字串只有數字。

4.3 如果要求匹配的內容是乙個完整的單詞,而不會是單詞的一部分,那麼在表示式首尾使用 "/b",比如:使用 "/b

(if|while|else|void|int……)

/b" 來匹配程式中的關鍵字。

4.4 表示式不要匹配空字串。否則會一直得到匹配成功,而結果什麼都沒有匹配到。比如:準備寫乙個匹配 "123"、"123."、"123.5"、".5" 這幾種形式的表示式時,整數、小數點、小數數字都可以省略,但是不要將表示式寫成:"/d

*/.?/d*

",因為如果什麼都沒有,這個表示式也可以匹配成功。更好的寫法是:"/d

+/.?/d*

|/./d+"。

4.5 能匹配空字串的子匹配不要迴圈無限次。如果括號內的子表示式中的每一部分都可以匹配 0 次,而這個括號整體又可以匹配無限次,那麼情況可能比上一條所說的更嚴重,匹配過程中可能死迴圈。雖然現在有些正規表示式引擎已經通過辦法避免了這種情況出現死迴圈了,比如 .net 的正規表示式,但是我們仍然應該盡量避免出現這種情況。如果我們在寫表示式時遇到了死迴圈,也可以從這一點入手,查詢一下是否是本條所說的原因。

4.6 合理選擇貪婪模式與非貪婪模式,參見話題討論。

4.7 或 "|" 的左右兩邊,對某個字元最好只有一邊可以匹配,這樣,不會因為 "|" 兩邊的表示式因為交換位置而有所不同。

正規表示式 規則表示式

今天學習了正規表示式的一些基礎知識,1.概念 首先了解了一下正規表示式的含義 一些便於計算機識別的規則,能夠快速方便地對字元進行操作。而對於計算機而言,也有一寫規則表示式,它是能令計算機讀懂的 所以對我們來說看起來比較費勁 也相當於計算機的常識,一遇到就知道你要幹什麼。2.建立正則物件 var re...

正規表示式 規則

system.out.printf example 2f n 19.234 example 19.23 system.out.printf example 6.2f n 19.234 example 19.23 l xn匹配 ascii 碼值等於 n的字元 此處的 n 必須是兩位的十六進製制數。例如...

正規表示式規則

正規表示式是用乙個字串表示乙個特徵,來驗證另乙個字串是否滿足這一特徵的方法。正規表示式主要用於檢驗規則匹配,查詢特定規則字串的位置,進行特定規則替換。1.匹配普通字元 匹配乙個特定的字元,如a,那麼正規表示式就寫為a。2.匹配轉義字元 一般轉義字元 r 回車,n 換行,t 製表符,f 換頁符,v 垂...