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++中使用正則表示式的方法,真正難度大的是正則表示式的本身。作者這方面經驗也不多,本文能帶大家摸到正則表示式的門就很知足了。
覺得本文有幫助?請分享給更多人。
閱讀更多更新文章,請掃描下面二維碼,關注微信公眾號【面向物件思考】