C 面試 C 11 新特性之正規表示式

2021-08-18 01:53:43 字數 2555 閱讀 7314

先看看如何用c++11中的regex匹配乙個電子郵箱位址。

std:

:cout<<"test regex ****** usage:\n"

;std:

:string email_pattern("(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w+)+)");

try}

catch (std:

:regex_error e)

std:

:cout<<"test regex ****** usage done.\n"

<:

:endl;

c++中的regex預設使用ecma-262正規表示式規範,這也是眾多瀏覽器所使用的標準。

注意到email_pattern中有好多雙斜線,這是因為除了regex模組要做一次轉**析外,c++ string也會對字串做一次轉**析。

在構造regex物件時,可以指定多種標識已實現特定的效果。這裡以使用regex::icase達到不區分大小寫的匹配為例。

std::cout

<<"test regex icase:\n";

try;

for(auto fn : test_filenames)

}}catch (std::regex_error e)

std::cout

<<"test regex icase done.\n"

<

std:

:cout<<"test regex iterator usage:\n"

;try

}catch (std:

:regex_error e)

std:

:cout<<"test regex iterator usage done.\n"

<:

:endl;

regex也支援子表示式,和其他正規表示式一樣,使用括號括起來的構成乙個子表示式。在匹配結果中,序號0表示整個匹配結果,序號1表示子表示式1的匹配結果……

下面以乙個座機**號碼的匹配驗證為例,說明子表示式的運用:

std:

:cout<<"test regex sub_match usage:\n"

;std:

:string phone_pattern = "(\\()?(\\d)(\\))?([- ])?(\\d)";

try;

for(auto fn : test_phones)

else

std:

:cout<.str()<:endl;}}

}catch (std:

:regex_error e)

std:

:cout<<"test regex sub_match usage done.\n"

<:

:endl;

regex同樣提供了替換功能。將替換功能和子表示式結合起來,可以實現字串的格式化功能:

std

::cout

<<"test

regex

replace

usage:\n";

trycatch (std

::regex_error

e)std

::cout

<<"test

regex

replace

usage

done.\n"<::endl;

其中format字串中2和

2

和5就分別表示第二個子表示式和第5個子表示式。

整個測試程式的輸出結果如下:

test regex ****** usage:

yubo1911@163

.com

test regex ****** usage done.

test regex icase:

cpp file: regex.cpp

cpp file: template.cpp

cpp file: class.hpp

test regex icase done.

test regex iterator usage:

yubo1911@163

.com

[email protected]

[email protected]

test regex iterator usage done.

test regex sub_match usage:

010-82224567

(020)62334567

(021) 22346543

0357-4223456

test regex sub_match usage done.

test regex replace usage:

formated phone: yubo: 020-85776452

test regex replace usage done.

C 11 新特性之Lambda表示式

一 lambda表示式 c 11中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或exception 宣告 返回值型別 可以看到,lambda主要分為五個部分 函式物件引數 操作符過載函式引數...

C 11正規表示式

優勢 使得字串的處理更加簡單 一些相關的操作 驗證 檢查字串是否是想要的合法性 決策 判斷乙個輸入標書哪種字串 解析 從輸入的字串中查詢自己想要的資訊 轉換 搜尋字串,並將字串替換為新的格式化的字串 遍歷 搜尋字串所有出現的地方 符號化 根據一組分隔符將乙個字串分解為多個子字串 一些重要術語 模式 ...

c 11 正規表示式

include include 正規表示式標頭檔案 using namespace std regex search 檢索 regex replace 將檢索到的物件進行替換替換 match 是否匹配 void main cout 正規表示式實現字串的替換 void main 匹配時間 void m...