最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?Boost?Xpressive示例分析使用

 更新時間:2022年11月15日 08:46:44   作者:無水先生  
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱

一、綜述

與 Boost.Regex 一樣,Boost.Xpressive 提供了使用正則表達(dá)式搜索字符串的函數(shù)。然而,Boost.Xpressive 使得將正則表達(dá)式寫成 C++ 代碼而不是字符串成為可能。這使得在編譯時檢查正則表達(dá)式是否有效成為可能。

只有 Boost.Regex 被合并到 C++11 中。標(biāo)準(zhǔn)庫不支持將正則表達(dá)式編寫為 C++ 代碼。

boost/xpressive/xpressive.hpp 提供對 Boost.Xpressive 中大多數(shù)庫函數(shù)的訪問。對于某些函數(shù),必須包含額外的頭文件。該庫的所有定義都可以在命名空間 boost::xpressive 中找到。

二、應(yīng)用示例

2.1 示例 9.1

boost::xpressive::regex_match 比較字符串

示例 9.1使用 boost::xpressive::regex_match 比較字符串。

#include <boost/xpressive/xpressive.hpp>
#include <string>
#include <iostream>
using namespace boost::xpressive;
int main()
{
  std::string s = "Boost Libraries";
  sregex expr = sregex::compile("\\w+\\s\\w+");
  std::cout << std::boolalpha << regex_match(s, expr) << '\n';
}

Boost.Xpressive 基本上提供了與 Boost.Regex 相同的功能,只是它們是在 Boost.Xpressive 的命名空間中定義的。 boost::xpressive::regex_match() 比較字符串,boost::xpressive::regex_search() 搜索字符串,boost::xpressive::regex_replace() 替換字符串中的字符。您可以在示例 9.1 中看到這一點,它使用函數(shù) boost::xpressive::regex_match(),并且看起來類似于示例 8.1。

但是,Boost.Xpressive 和 Boost.Regex 之間存在根本區(qū)別。 Boost.Xpressive 中正則表達(dá)式的類型取決于被搜索字符串的類型。因為 s 基于示例 9.1 中的 std::string,所以正則表達(dá)式的類型必須是 boost::xpressive::sregex。將此與示例 9.2 進(jìn)行比較,其中正則表達(dá)式應(yīng)用于類型為 const char* 的字符串

2.2 示例 9.2

boost::xpressive::cregex 類型為 const char* 的字符串

#include <boost/xpressive/xpressive.hpp>
#include <iostream>
using namespace boost::xpressive;
int main()
{
  const char *c = "Boost Libraries";
  cregex expr = cregex::compile("\\w+\\s\\w+");
  std::cout << std::boolalpha << regex_match(c, expr) << '\n';
}

對于 const char* 類型的字符串,請使用類 boost::xpressive::cregex。如果您使用其他字符串類型,例如 std::wstring 或 const wchar_t*,請使用 boost::xpressive::wsregex 或 boost::xpressive::wcregex。

對于以字符串形式編寫的正則表達(dá)式,您必須調(diào)用靜態(tài)成員函數(shù) compile()。成員函數(shù)必須在用于正則表達(dá)式的類型上調(diào)用。

Boost.Xpressive 支持以 C++ 代碼編寫的正則表達(dá)式的直接初始化。正則表達(dá)式必須以 Boost.Xpressive 支持的符號表示(參見示例 9.3)。

2.3 示例 9.3

帶有 C++ 代碼的正則表達(dá)式

#include <boost/xpressive/xpressive.hpp>
#include <string>
#include <iostream>
using namespace boost::xpressive;
int main()
{
  std::string s = "Boost Libraries";
  sregex expr = +_w >> _s >> +_w;
  std::cout << std::boolalpha << regex_match(s, expr) << '\n';
}

示例 9.2 中的正則表達(dá)式寫為字符串“\w+\s\w+”,現(xiàn)在在示例 9.3 中表示為 +_w >> _s >> +_w。它是完全相同的正則表達(dá)式。這兩個示例都搜索至少一個字母數(shù)字字符,后跟一個空格,然后搜索至少一個字母數(shù)字字符。

Boost.Xpressive 使使用 C++ 代碼編寫正則表達(dá)式成為可能。該庫為字符組提供對象。例如,對象 _w 類似于“\w”。 _s 與“\s”的含義相同。

雖然“\w”和“\s”可以在字符串中一個接一個地寫入,但像_w和_s這樣的對象必須與運(yùn)算符連接。否則,結(jié)果將不是有效的 C++ 代碼。 Boost.Xpressive 提供運(yùn)算符 operator>>,在示例 9.3 中使用。

為了表示應(yīng)該找到至少一個字母數(shù)字字符,_w 以加號為前綴。雖然正則表達(dá)式的語法要求量詞放在字符組后面——比如“\w+”——但加號必須放在_w前面。加號是一元運(yùn)算符,在 C++ 中必須放在對象前面。

Boost.Xpressive 盡可能多地模擬正則表達(dá)式的規(guī)則,因為它們可以在 C++ 中模擬。但是,也有限制。例如,問號是正則表達(dá)式中的元字符,表示前面的項目是可選的。由于問號在 C++ 中不是有效的運(yùn)算符,Boost.Xpressive 將其替換為感嘆號。像“\w?”這樣的符號使用 Boost.Xpressive 變?yōu)?!_w,因為感嘆號必須加前綴。

Boost.Xpressive 支持可以鏈接到表達(dá)式的動作——這是 Boost.Regex 不支持的。

2.4 示例 9.4

將動作鏈接到表達(dá)式

#include <boost/xpressive/xpressive.hpp>
#include <boost/xpressive/regex_actions.hpp>
#include <string>
#include <iterator>
#include <iostream>
using namespace boost::xpressive;
int main()
{
  std::string s = "Boost Libraries";
  std::ostream_iterator<std::string> it{std::cout, "\n"};
  sregex expr = (+_w)[*boost::xpressive::ref(it) = _] >> _s >> +_w;
  std::cout << std::boolalpha << regex_match(s, expr) << '\n';
}

示例 9.4 為 boost::xpressive::regex_match() 返回 true 并將 Boost 寫入標(biāo)準(zhǔn)輸出。

您可以將操作鏈接到表達(dá)式。當(dāng)找到相應(yīng)的表達(dá)式時執(zhí)行一個動作。在示例 9.4 中,表達(dá)式 +_w 鏈接到操作 *boost::xpressive::ref(it) = _。該操作是一個 lambda 函數(shù)。對象 _ 指的是表達(dá)式找到的字符——在本例中是 s 中的第一個單詞。相應(yīng)的字符被分配給迭代器 it。因為它是一個類型為 std::ostream_iterator 的迭代器,它已經(jīng)用 std::cout 進(jìn)行了初始化,所以 Boost 被寫入標(biāo)準(zhǔn)輸出。

請注意,您必須使用函數(shù) boost::xpressive::ref() 來包裝迭代器。只有這樣才能將_分配給迭代器。 _ 是 Boost.Xpressive 在命名空間 boost::xpressive 中提供的對象,通常不能將其分配給 std::ostream_iterator 類型的迭代器。因為僅當(dāng)使用 +_w 找到字符串“Boost”時才會發(fā)生賦值,所以 boost::xpressive::ref() 會將賦值變成惰性操作。盡管根據(jù) C++ 規(guī)則,附加到 +_w 的方括號中的代碼會立即執(zhí)行,但它只能在使用正則表達(dá)式時才對迭代器進(jìn)行賦值。因此,*boost::xpressive::ref(it) = _ 不會立即執(zhí)行。

示例 9.4 包含頭文件 boost/xpressive/regex_actions.hpp。這是必需的,因為無法通過 boost/xpressive/xpressive.hpp 執(zhí)行操作。

與 Boost.Regex 一樣,Boost.Xpressive 支持迭代器以使用正則表達(dá)式拆分字符串。 boost::xpressive::regex_token_iterator 和 boost::xpressive::regex_iterator 類執(zhí)行此操作。也可以將區(qū)域設(shè)置鏈接到正則表達(dá)式以使用全局區(qū)域之外的區(qū)域設(shè)置。

到此這篇關(guān)于C++ Boost Xpressive示例分析使用的文章就介紹到這了,更多相關(guān)C++ Boost Xpressive內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對稱矩陣的壓縮儲存講解

    對稱矩陣的壓縮儲存講解

    今天小編就為大家分享一篇關(guān)于對稱矩陣的壓縮儲存講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 淺析C/C++中sort函數(shù)的用法

    淺析C/C++中sort函數(shù)的用法

    做項目的時候,排序是一種經(jīng)常要用到的操作。如果每次都自己寫個冒泡之類的O(n^2)排序,不但程序容易超時,而且浪費(fèi)寶貴的時間,還很有可能寫錯。STL里面有個sort函數(shù),可以直接對數(shù)組排序,復(fù)雜度為n*log2(n)。
    2014-09-09
  • 解析C/C++中如何終止線程的運(yùn)行

    解析C/C++中如何終止線程的運(yùn)行

    本篇文章是對C/C++中如何終止線程運(yùn)行的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Visual?Studio?2022下載及配置OpenCV4.5.5的詳細(xì)過程

    Visual?Studio?2022下載及配置OpenCV4.5.5的詳細(xì)過程

    這篇文章主要介紹了Visual?Studio?2022下載及配置OpenCV4.5.5的詳細(xì)過程,在這里注意下Win10的64位操作系統(tǒng),在OpenCV官網(wǎng)下載OpenCV4.5.5,安裝的是Win?pack,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 使用C語言實現(xiàn)12種排序方法

    使用C語言實現(xiàn)12種排序方法

    這篇文章主要介紹了用C語言完整實現(xiàn)12種排序方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • C++中頭文件和源文件詳細(xì)介紹

    C++中頭文件和源文件詳細(xì)介紹

    這篇文章主要介紹了C++中頭文件和源文件詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 用C++實現(xiàn)推箱子

    用C++實現(xiàn)推箱子

    這篇文章主要為大家詳細(xì)介紹了用C++實現(xiàn)推箱子,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • C++實現(xiàn)添加桌面右鍵新建菜單

    C++實現(xiàn)添加桌面右鍵新建菜單

    本文給大家匯總了3個版本的C++實現(xiàn)添加桌面右鍵新建菜單的代碼,陸陸續(xù)續(xù)寫的,有需要的小伙伴可以根據(jù)自己的需求來選擇
    2016-01-01
  • C語言設(shè)計模式之命令模式介紹

    C語言設(shè)計模式之命令模式介紹

    大家好,本篇文章主要講的是C語言設(shè)計模式之命令模式介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++編程中將引用類型作為函數(shù)參數(shù)的方法指南

    C++編程中將引用類型作為函數(shù)參數(shù)的方法指南

    這篇文章主要介紹了C++編程中將引用類型作為函數(shù)參數(shù)的方法指南,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09

最新評論

合阳县| 和硕县| 和静县| 邛崃市| 房产| 梁山县| 平昌县| 临潭县| 屏南县| 岑巩县| 碌曲县| 斗六市| 唐海县| 靖宇县| 阿克| 沙雅县| 彭水| 祥云县| 肇庆市| 达州市| 洪湖市| 巴彦县| 三原县| 阳新县| 武夷山市| 博爱县| 磴口县| 新营市| 鄄城县| 江源县| 南华县| 汕头市| 武安市| 定陶县| 融水| 江山市| 平泉县| 随州市| 民乐县| 沁阳市| 荔波县|