1. 什麼是正則表達式
基本說來,正則表達式是一種用來描述一定數量文本的模式。 Regex 代表 Regular Express 。
在編寫處理字符串的程序 或網頁時,經常會有查找符合某些複雜規則的字符串的需要。正則表達式 就是用於描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼 。
2. 正則表達式中的特殊字符
[ ] / ^ $ . | ? * + ( )
這些特殊字符也被稱作元字符。
如果你想在正則表達式中將這些字符用作文本字符,你需要用反斜槓“ / ”對其進行換碼 (escape) 。例如你想匹配“ 1+1= 2 ” ,正確的表達式爲 <<1/+1=2>>.
需要注意的是, <<1+1=2>> 也是有效的正則表達式。但它不會匹配“ 1+1= 2 ” ,而會匹配“ 123+111= 234 ” 中的“ 111=2 ”。因爲“ + ”在這裏表示特殊含義(重複 1 次到多次)。
在編程語言中,要注意,一些特殊的字符會先被編譯 器處理,然後再傳遞給正則引擎。因此正則表達式 <<1/+2=2>> 在 C++ 中要寫成“ 1//+1= 2 ” 。爲了匹配“ C:/temp ”,你要用正則表達式 <<C://temp>> 。而在 C++ 中,正則表達式則變成了“ C:////temp ”。
3. 元字符描述
. 匹配任何單個字符。例如正則表達式 r.t 匹配這些字符串: rat 、 rut 、 r t ,但是不匹配 root 。
$
匹配行結束符。例如正則表達式
weasel$
能夠匹配字符串
"He's a weasel"
的末尾,但是不能匹配字符串
"They are a bunch of weasels."
。
^
匹配一行的開始。例如正則表達式
^When in
能夠匹配字符串
"When in the course of human events"
的開始,但是不能匹配
"What and When in the"
。
*
匹配
0
或多個正好在它之前的那個字符。例如正則表達式
.*
意味着能夠匹配任意數量的任何字符。
[ ]
匹配括號中的任何一個字符。例如正則表達式
r[aou]t
匹配
rat
、
rot
和
rut
,但是不匹配
ret
。可以在括號中使用連字符
-
來指定字符的區間,例如正則表達式
[0-9]
可以匹配任何數字字符;還可以制定多個區間,例如正則表達式
[A-Za-z]
可以匹配任何大小寫字母。另一個重要的用法是
“
排除
”
,要想匹配除了指定區間之外的字符
——
也就是所謂的補集
——
在左邊的括號和第一個字符之間使用
^
字符,例如正則表達式
[^269A-Z]
將匹配除了
2
、
6
、
9
和所有大寫字母之外的任何字符。
( )
將
(
和
)
之間的表達式定義
爲
“
組
”
(
group
),並且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多可以保存
9
個),它們可以用
到
的符號來引用。
|
將兩個匹配條件進行邏輯
“
或
”
(
Or
)運算。例如正則表達式
(him|her)
匹配
"it belongs to him"
和
"it belongs to her"
,但是不能匹配
"it belongs to them."
。注意:這個元字符不是所有的軟件
都支持的。
+
匹配
1
或多個正好在它之前的那個字符。例如正則表達式
9+
匹配
9
、
99
、
999
等。注意:這個元字符不是所有的軟件都支持的。
?
匹配
0
或
1
個正好在它之前的那個字符。注意:這個元字符不是所有的軟件都支持的。
{i} {i,j}
匹配指定數目的字符,這些字符是在它之前的表達式定義的。例如正則表達式 A[0-9]/{3/} 能夠匹配字符 "A" 後面跟着正好 3 個數字字符的串,例如 A123 、 A348 等,但是不匹配 A1234 。而正則表達式 [0-9]/{4,6/} 匹配連續的任意 4 個、 5 個或者 6 個數字字符。