1. 程式人生 > >C++11新特性(74)-正則表示式庫(regular-expression library)

C++11新特性(74)-正則表示式庫(regular-expression library)

正則表示式(regular expression)是一種描述字元序列的方法,從C++11起,C++正則表示式庫(regular-expression library)成為新標準庫的一部分。

由於正則表示式本身就是一個非常龐大的系統,本文只介紹C++中使用正則表示式的小例子,淺嘗輒止。

基本用法

程式碼說明

最基本的用法當然就是定義正則表示式,然後使用它。

程式碼中使用regex定義了一個正則表示式r,它描述的是單詞"test"。之所以說是單詞,是因為"test"的兩端分別放置了用於匹配單詞開始或結束的元字元'\b'。由於我們在C++環境中編碼,所以實際的程式碼中使用的是"\\b"。

 

輸出結果

例句中雖然存在一個testing,還是正確地找到一個test。

使用子表示式

正則表示式經常包含子表示式,即表示式中被小括號包圍的部分。

程式碼說明

程式碼中定義的正則表示式包含兩個子表示式,分別用於匹配檔名和副檔名。

匹配結果的取得也略有不同,在包含子表示式時,使用str(0)取得匹配結果的全體,使用str(1)是第一個子表示式,以此類推。

 

輸出結果

匹配迭代器

實際的開發中,經常會發生重複查詢的情況,表示式庫中另外提供了sregex_iterator來處理這個問題。

程式碼說明

首先定義正則表示式為以test開始的單詞。然後定義兩個sregex_iterator。一個用於匹配查詢,另一個用於完了判斷。

輸出結果

可以看到,匹配一共發生了兩次。但是比較遺憾的是顯示的都是匹配的部分。彆著急。

 

子表示式+迭代器

看一下重複查詢語句的不同的檔名的例子。

程式碼說明

程式碼結合了子表示式和迭代器兩個技術。

輸出結果

看起來像是那麼回事了。

 

參考資料

 

正則表示式30分鐘入門教程

https://deerchao.net/tutorials/regex/regex.htm

 

示例程式碼

https://github.com/xueweiguo/OOThinking/blob/master/20180510%20regex.cpp

 

作者一句話

本文只是介紹的C++中使用正則表示式的方法,真正難度大的是正則表示式的本身。作者這方面經驗也不多,本文能帶大家摸到正則表示式的門就很知足了。

 

覺得本文有幫助?請分享給更多人。

閱讀更多更新文章,請掃描下面二維碼,關注微信公眾號【面向物件思考】