正規表示式通常包含字母文字(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+)>
可以匹配