C 中使用正規表示式操作字串

2021-06-01 09:32:11 字數 1206 閱讀 2908

一、前言

之前在c++中使用正規表示式是比較頭痛的問題,要麼需要引用第三方庫,要麼需要自己實現匹配過程。雖然使用第三方的庫確實可行,但對程式的移植帶來一定的困難,有時不得不帶上笨重的boost庫或使用為perl開發的c語言庫,新的c++標準中加入了對正規表示式的支援,這的確是大快人心,因為在字串處理中或多或少使用正規表示式能達到事半功倍的效果,且程式的健壯性得到很好的保持。下面就使用c++的正規表示式寫個hello world等級的程式,旨在拋磚引玉。

二、正規表示支援的c++標準實現

stl使用固然簡單,但要檢視源**實現確實是a piece of ****,鋪天蓋地的模板讓人找不著北。廢話少說,簡要介紹下stl中正規表示式部分。

引入的頭檔名為regex,其中定義的幾個幾個模板類,重要的如basic_regex,match_results,regex_error等,其餘的幾個類為常量定義或個性化模板,提供的方法有regex_search,regex_match,regex_replace,regex_swap,這些就是最期望看到的函式,從函式名稱就能看出大概實現什麼功能。其中最後乙個比較少用外,其餘三個是必不可少的選擇。

標頭檔案中還定義了數目較多的常量和個性化模板型別,可根據需要進行選取,避免的自己寫大量typedef語句,具體內容可以參看乙份stl的標頭檔案即可。

三、hello world程式

本示例程式使用了查詢、匹配和替換三個函式,使用交換函式也相對簡單,如法泡製即可。在替換函式中需要說明的是format引數支援look back方式的替換,即根據正規表示式可以取到子表示式匹配的內容用於執行替換,這部分也是正規表示式很常用的。

下面是源程式**:

#include #include #include using namespace std;

int main(int argc, char *argv)

{ string s("i went to wikipedia tonight to look up steve jobs』 birthday to write this post.");

regex rx("w[a-z]+a");

cmatch mr;

if(regex_search(s.c_str(),mr,rx)){

cout<

for_each(mr.begin(),mr.end(),(string si){cout<

執行效果如下圖所示:

C 中使用正規表示式

正規表示式是一種用於模式匹配和替換的強有力工具,它通過構建乙個表示式對輸入的字串進行模式匹配,然後返回處理後的結果,如果你對它還不了解,請繼續往下看。以最廣泛的web身份驗證為例 我們從頁面中接收到輸入的使用者名稱,存入變數temp username,此時變數中可能含有惡意的資訊,我們想要使用者名稱...

字串操作》字串編碼和使用正規表示式

字串操作 字串編碼 system.text提供了encoding的抽象類,這個類提供字串編碼的方法。使unicode字元陣列的字串,轉換為指定編碼的位元組陣列,或者反之。unicode有四種編碼格式,utf 8,utf 16,utf 32,utf 7。字元編碼類,asciiencoding utf7...

使用正規表示式分隔字串

在分隔乙個字串為陣列時可採用string物件上的spilt方法,可以傳入乙個字串進行分隔也可以傳入乙個正規表示式進行分隔。比如字串是由很多單詞構成的,中間採用的分隔符可能有空格或標點符號或其他的特殊字元。比如下列的字串物件 string str station news talk 可以採用如下 進行...