正規表示式的語法規則

2021-04-08 19:03:16 字數 3231 閱讀 4461

正規表示式通常包含字母文字(literal text)和元字元(metacharacter)

字母文字指的是普通文字如"abcde"可匹配字串中任何包含"abcde"的字串。

元字元則更加靈活運用通用的表示式匹配所有符合此表示式規律的字串。

一、匹配單個字元

[ ]——

從中選擇乙個字元匹配

中間支援的型別:單詞字元([ae])、非單詞字元([!?,;@#$*])、字母範圍([a-z])、數字範圍([0])

eg. 

正規表示式

可匹配字串

[ae]ffect

affect,effect

(此例中"[ae]"為元字元,"ffect"為字母文字)

注意:1.要在字元類中匹配連字元,那麼把連字符號作為第乙個字元列出即可。

2.可以在單個正規表示式中包含多個字元類。

eg.   [01][0-9]:[0-5][0-9][ap]m 可以用來匹配如12:59pm

格式的所有時間

^——排除某些字元(在[ ]中表此意,還可表示字串的開頭)

eg. 

正規表示式

可匹配字串

不可匹配字串

m[^a]t

met,mit,m&t……

mat二、匹配特殊字元 

可以使用的特殊字元:

描述表示字元類的元字元:

表示字串中字元位置:

注意:1.句點字元(.)特別有用。可以用它來表示任何乙個字元。

eg. 

正規表示式

可匹配字串

01.17.84

01/17/84 , 01-17-84 , 01 17 84 , 01.17.84

2.可以使用/b匹配單詞的邊界

eg.

正規表示式

可匹配字串

不可匹配字串

/blet/b

letletter,hamlet

3./a和/z在確保字串所包含的是某個表示式,而不是其他內容時很用。

eg.要判斷text控制項是否包含單詞"sophia",而不含任何額外的字元、換行符或者空白。

/asophia/z

4.句點字元(.

)具有特殊的含義,若要表示字母字元本身的含義,在前面加乙個反斜槓:

/.三、匹配而選一的字串行

|——匹配二選一

eg. 

正規表示式

可匹配字串

col(o|ou)r

color,colour

注意:/b(bill|ted)

和/bbill|ted

是不同的。

後者還可以匹配"malted

"因為/b元字元只應用於"bill"。

四、用量詞匹配

eg. 

正規表示式

可匹配字串

brothers?

brother,brothers

eg. 

正規表示式

可匹配字串

/bp/d/b

以p開頭,且後跟3~5個數字結尾

注意:也可以把量詞與()一起使用,以便把該量詞應用到整個字母序列。

eg. 

正規表示式

可匹配字串

(the)?school is beautiful.

school is beautiful,the school is beautiful.

五、識別正規表示式和貪婪

有些量詞是貪婪的(greedy).他們會盡可能多的匹配字元。

如量詞*

匹配0個或多個字元。假設要匹配字串中任何html標籤。你可能會用如下正規表示式:

<.*>

現有字串a quantifier can be greedy

結果<.*>

把quantifier can be greedy

都匹配上了。

要解決該問題,需要與量詞一起使用乙個特殊的非貪婪字元「?

」,因此表示式變化如下:

<.*?>

這樣就可以正確匹配、、、。?

能強制量詞盡可能少地匹配字元,?還可以用在以下幾個量詞中:

六、捕獲和反向引用

捕獲組(capture group)就像是正規表示式中的變數。捕獲組可以捕獲正規表示式中的字元模式,並且由正規表示式後面的編號或名稱來引用改模式。

( )    ——用來捕獲其中的字串

/數字——

用編號來引用

eg. 

正規表示式

可匹配字串

(/w)(/w)/2/1

abba

注意:1.反向引用用來匹配html標籤非常有效如<(/w+)>

可以匹配

等類似格式的標籤。

2.預設情況下,只要使用圓括號,就會捕獲圓括號內所包含的字元,可以使用n選項來禁用這個預設行為(在第7條裡會詳細介紹),或者新增?:

到圓括號中。

eg. (?:sophia)

或 (?n:sophia

)此時不會捕獲sophia。

(?<捕獲組名稱>)/k<捕獲組名稱>

——用名稱來引用

eg. 

正規表示式

可匹配字串

(?/w)abc/k

xabcx

注意:在替換模式中使用捕獲組的格式略有不同,要用$1、$2

等來按數值引用捕獲,用$

等名稱來按名稱引用捕獲組

七、設定正規表示式的選項

eg.

string

str ="

sophia

"regex objregex 

=new

regex(

"(.*?)

");

response.write(objregex.replace(str,"$2

"));

eg. (?im-r:sophia)

允許不區分大小寫匹配sophia,使用多行模式,但禁用了從右到左的匹配。

注意:1.m

會影響如何解析起始元字元(^

)和結束元字元($

)。在預設情況^和$只匹配

整個字串的開頭,即使字串包含多行文字。如果啟用了m,那麼它們就可以匹配每行文字的開頭和結尾。

2.s

會影響如何解析句點元字元(

.)。通常乙個句點能匹配除了換行符以外的所有字元。但在單行模式下,句點也能匹配乙個換行符。

正規表示式的語法規則

一 行定位符 和 行定位符就是用來描述字串的邊界。表示行的開始 表示行的結尾。如 tm 該表示式表示要匹配字串tm的開始位置是行頭,如tm equal tomorrow moon就可以匹配 tm 該表示式表示要匹配字串tm的位置是行尾,tomorrow moon equal tm匹配。如果要匹配的字...

正規表示式之語法規則

正規表示式 描述在搜尋文字正文時要匹配的乙個或多個字串。該表示式可用作乙個將字元模式與要搜尋的字串相匹配的模板。正規表示式包括普通字元 例如,a 到 z 之間的字母 和特殊字元 稱為 元字元 特殊字元 元字元下表包含了多字元元字元的列表以及它們在正規表示式中的行為。元字元 行為 示例 b 與乙個字邊...

C 正規表示式語法規則詳解

字母文字指的是普通文字如 abcde 可匹配字串中任何包含 abcde 的字串。元字元則更加靈活運用通用的表示式匹配所有符合此表示式規律的字串。c 正規表示式語法一 匹配單個字元 從中選擇乙個字元匹配 中間支援的型別 單詞字元 ae 非單詞字元 字母範圍 a z 數字範圍 0 eg.正規表示式 ae...