首先,正規表示式我只會三大主要演算法,其他的我可能沒有了解到,畢竟還沒有實戰經驗。
1.第一演算法——匹配演算法( 使用函式regex e()與regex_match() )
***第一種 (至於匹配結果,我就只用ip位址來驗證)
#include#includeusing namespace std;
//新增標頭檔案
#include //寫乙個匹配函式
bool isemail(string str)
"); //表示4-10個字元 指定個數
//regex e("ada(e|b)"); //表示或者
//regex e("^[a-z]"); //屬於a-a [^a-z] 不屬於a-z
//regex e("[a-za-z][a-za-z0-9_]");
bool b = regex_match(str, e);
return b;
}int main()
else cout << "this is not an email" << endl;
return 0;
}
如圖第乙個大概ip位址匹配可知,為四段數字組成,前三段可以是多個數字,而最後一段只能為乙個故結果如下
***第二種
如圖可知表示乙個或多個字母或者數字int main()
else
}
結果我就不寫了,為了文章簡單一點。
2. 第二演算法——搜尋演算法( 使用函式regex e() 與 regex_search() )
所以,結果如下#includeusing namespace std;
#include int main();
regex e("\\b(o)[^ ?.]+"); // ^ 在字符集裡面表示的是乙個否定
smatch m; //存放string 型別的結果 string型別的迭代器
while (regex_search(str, m, e))
return 0;
}
**********************在這裡有乙個比較有意思的東西 smatch, 那麼這個smatch表示什麼呢?**中也說了,smatch是乙個迭代器,它是c++11中新加入的正規表示式的支援,由sub_match模板類得來。(如果用vs的夥伴,可以除錯,轉義看看) 使用smatch可以例項出乙個物件,來儲存被表示式所匹配到了的字串。
3.第三大演算法——替換演算法(使用regex e() 與regex_replace以及檔案操作函式)
如下圖,上面是修改後,下方是修改前的#include#include#include#includeusing namespace std;
int main();
file.read(sztemp, sizeof(char)*a);
str += sztemp;
//關閉檔案
file.close();
regex e("\\b(sf)[^ .?]*"); //此處為定義需要被替換的字串
string s;
//此處family為替換之後的字串
regex_replace(back_inserter(s), str.begin(), str.end(), e , "family");
cout << s << endl;
//開啟檔案 以寫的二進位制格式
fstream file1("swap.txt", ios::out | ios::binary);
file1.write(s.c_str(), s.size());
file1.close();
return 0;
}
ps: 檔案操作就不說了(調皮) ,加油!
正規表示式 常用正規表示式
一 校驗數字的表示式 1 數字 0 9 2 n位的數字 d 3 至少n位的數字 d 4 m n位的數字 d 5 零和非零開頭的數字 0 1 9 0 9 6 非零開頭的最多帶兩位小數的數字 1 9 0 9 0 9 7 帶1 2位小數的正數或負數 d d 8 正數 負數 和小數 d d 9 有兩位小數的...
正規表示式 常用正規表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 4 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 或者 1 3...
正規表示式常用
正規表示式的介紹 1 資料型別 基本資料型別 number string boolean null undefined 複雜資料型別 array function object math date regexp正規表示式 string number boolean 2 regular express...