c++正則表達式


正則匹配實際上可以看做是一種屬性匹配,一個字符串中,他的每個字符可以看做是一個實體,字符中間的縫隙也可以看做是實體,他們的屬性包括內在屬性和關聯屬性(該屬性取決於字符的外部環境),每個屬性標記代表的是一個屬性集合,小的集合構成大的集合從而形成整體屬性。

三個基本操作

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個分組的子串

$& 代指當前匹配到子串

$$ 代指符號本身

需要轉義的字符

  1. $ ---> \$  
  2. ( ---> \(  
  3. ) ---> \)  
  4. * ---> \*  
  5. + ---> \+  
  6. . ---> \.  
  7. [ ---> \[  
  8. ] ---> \]  
  9. ? ---> \?  
  10. \ ---> \\  
  11. / ---> \/  
  12. ^ ---> \^  
  13. { ---> \{  
  14. } ---> \} 

還有一種平衡組的用法, 主要使用下面幾個功能

(?'group'exp) 將exp壓入堆棧

(?'-group'exp) 將exp彈出堆棧

(?(group)yes|no)檢查堆棧中是否含有exp 然后繼續匹配yes 或no分支

(?!)回顧斷言,不能匹配任何東西,可以作為yes 或no條件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM