[C/C++11]_[初級][正規表現ライブラリregexを使用]
シーン正規表現は、非常に多くの文字列検索を処理する、置換時に手間を省くことができ、少し複雑な点の文字列が一致すれば、正規表現がなければ本当にできない. C++11は正規表現ライブラリを提供する.boostの正規ライブラリより使いやすい. Javaをするのはきっととても面白いと感じて、これはすべてJavaの標準的な機能で、どのようにC++11はやっとこのライブラリを支持して、vs 2010はやっと支持します.文字列検索の置換を処理する時、直接正則を使うことをお勧めします.コード量が少なく、速いです.
リファレンス
std::regex_replace std::regex_iterator Regular Expressions (C++)
説明正規表現の文法はあまり言わないが、vs 2010はモード文字列が間違っていると、実行もクラッシュする.一般的に正規メソッドを呼び出す時報エラーは基本的にモード文字列の書き間違えである. 正則の文法は本当に多くて、前へ後ろへ、グループ...参考にしましょう、普通はすべてマスターする必要はありませんで十分です.
例
出力:
リファレンス
std::regex_replace std::regex_iterator Regular Expressions (C++)
説明
例
// test_reg.cpp : 。
//
#include "stdafx.h"
#include <regex>
#include <string>
#include <assert.h>
#include <iostream>
static std::string kHtmlSnippet = "<p><img src=\"D:\\DOC\\个人软件\\需求文档\\安卓助手\\android\\images\\main\\main.png\" width=\"30%\" height=\"30%\"></p>"
"<ol>"
"<li>ddd </li>"
"<li>xxx</li>"
"</ol>"
"<p><img src=\"D:\\DOC\\个人软件\\需求文档\\安卓助手\\android\\images\\main\\main-about.png\" width=\"30%\" height=\"30%\"></p>"
"<ol>"
"<li>xxxxx</li>"
"</ol>"
"<p><img src=\"D:\\DOC\\个人软件\\需求文档\\安卓助手\\android\\images\\main\\main-setting.png\" width=\"30%\" height=\"30%\"></p>";
void TestReplace()
{
std::cout << "TestReplace ====" << std::endl; // img src images . // . std::regex img_regex("(<img [^>]*src=[\"']{1})([^\"']*)\\\\(images\\\\[^\"']*[\"']{1}[^>]*>)");
std::smatch color_match;
std::string rep = "$1$3";
std::string tmp = std::regex_replace(kHtmlSnippet,img_regex,rep);
std::cout << tmp << std::endl; } void TestSearch() { std::cout << "TestSearch ====" << std::endl; // img std::regex img_regex("<img [^>]+>");
// std::regex_search .
std::smatch color_match;
std::cout << "regex_search ====" << std::endl; if(std::regex_search(kHtmlSnippet, color_match, img_regex)) { std::cout << color_match[0] << '\n'; } // std::regex_iterator . std::cout << "sregex_iterator ====" << std::endl; auto words_begin = std::sregex_iterator(kHtmlSnippet.begin(), kHtmlSnippet.end(), img_regex); auto words_end = std::sregex_iterator(); for (std::sregex_iterator i = words_begin; i != words_end; ++i) { std::smatch match = *i; std::string match_str = match.str(); std::cout << match_str << '\n'; } } int _tmain(int argc, _TCHAR* argv[]) { TestSearch(); TestReplace(); return 0; }
出力:
TestSearch ====
regex_search ====
<img src="D:\DOC\个人软件\需求文چ 3;\安卓助手\android\images\main\main.png" width="30%" he ight="30%">
sregex_iterator ====
<img src="D:\DOC\个人软件\需求文چ 3;\安卓助手\android\images\main\main.png" width="30%" he ight="30%">
<img src="D:\DOC\个人软件\需求文چ 3;\安卓助手\android\images\main\main-about.png" width="3 0%" height="30%">
<img src="D:\DOC\个人软件\需求文چ 3;\安卓助手\android\images\main\main-setting.png" width= "30%" height="30%">
TestReplace ====
<p><img src="images\main\main.png" width="30%" height="30%"></p><ol><li>ddd
</li><li>xxx</li></ol><p><img src="images\main\main-about.png" width="30%" hei ght="30%"></p><ol><li>xxxxx</li></ol><p><img src="images\main\main-setting.png" width="30%" height="30%"></p>