正則匹配實際上可以看做是一種屬性匹配,一個字符串中,他的每個字符可以看做是一個實體,字符中間的縫隙也可以看做是實體,他們的屬性包括內在屬性和關聯屬性(該屬性取決於字符的外部環境),每個屬性標記代表的是一個屬性集合,小的集合構成大的集合從而形成整體屬性。
三個基本操作
1.regex_match判斷目標字串是否匹配指定的正則表達式
2.regex_search在目標字串中尋找匹配指定正則式的字串
3.regex_replace 在目標字串中尋找匹配指定正則式的字串,之后用預設的字串替換這些匹配的字串
每次匹配應該包含三個主要元素,1)目標字串 2)正則式 3)匹配結果
屬性標記分兩類:
1)字符屬性標記
- 內在屬性表示字符本身的含義,例如\d . \t \v \s \r \cletter[class] [^class]
- 關聯屬性,例如\w(一個單詞) 、重復次數* + ? {int,int} ,對於"aaa",我們可以用“a{3}”,這三個a本來都是獨立的個體,但是他們放在一起就又具有了關聯屬性(就是重復三次),對第一個a而言,他的右邊也是一個a,同時他右邊這個a的右邊也是一個a,因此第一個a可以匹配 a{3},同樣第二三個a也匹配該屬性。
2)位置屬性標記
- 他的內在屬性很簡單,就是一個位置
- 一個位置根據所處的外部環境不同就形成了多樣的關聯屬性 ^ $ \b ?= ?<,位置不會有重復次數這種關聯屬性
--------------------------------------------------------------------------------------------------------------------------
對於匹配結果有下面幾個結果提取符號可用
$n 代指第n個分組的子串
$& 代指當前匹配到子串
$$ 代指符號本身
需要轉義的字符
- $ ---> \$
- ( ---> \(
- ) ---> \)
- * ---> \*
- + ---> \+
- . ---> \.
- [ ---> \[
- ] ---> \]
- ? ---> \?
- \ ---> \\
- / ---> \/
- ^ ---> \^
- { ---> \{
- } ---> \}
還有一種平衡組的用法, 主要使用下面幾個功能
(?'group'exp) 將exp壓入堆棧
(?'-group'exp) 將exp彈出堆棧
(?(group)yes|no)檢查堆棧中是否含有exp 然后繼續匹配yes 或no分支
(?!)回顧斷言,不能匹配任何東西,可以作為yes 或no條件