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

QT5中使用QRegularExpression代替QRegExp方法代碼

 更新時(shí)間:2024年04月29日 09:06:31   作者:嶺峰翊曈  
這篇文章主要給大家介紹了關(guān)于QT5中使用QRegularExpression代替QRegExp的相關(guān)資料,正則表達(dá)式(regep)是處理字符串和文本的強(qiáng)大工具,驗(yàn)證regexp可以測試子字符串是否滿足某些條件,例如是整數(shù)或不包含空格,需要的朋友可以參考下

前言

今天遇到一個(gè)奇怪的問題,在qt5.12版本中使用正則QRegExp regx.setPattern(“[0-9]{10}”);去匹配一個(gè)十個(gè)連續(xù)數(shù)字,神奇的出現(xiàn)了在Debug調(diào)試模式下,匹配字符串 ”D:/Project/bin/輸液監(jiān)控0571001001.db“無法通過,在release模式下,可以匹配通過,并獲取到“0571001001”字符串。帶著這個(gè)我問題我上網(wǎng)查了一些資料。發(fā)現(xiàn)是QRegExp不支持反向預(yù)查,并且大家都有棄用QRegExp啟用QRegularExpression,原因有QRegExp它具有笨拙的API,運(yùn)行緩慢,錯(cuò)誤,無法維護(hù),支持perl regexp功能的非常有限子集,以此類推。QRegularExpression是Qt5加入的,QRegularExpression相比與QRegExp幾乎完全兼容了perl的RegExp引用。且似乎處理了QRegExp中的錯(cuò)誤。

QRegExp類簡介

QRegExp類是qt框架的一部分,很早以前就引入了(QT4.2)。其基本使用如

  • matchedLength() : 匹配的長度
  • capturedTexts() : 捕捉到的字符串列表
  • captureCount() : 獲取表達(dá)式中含有的捕捉組的數(shù)組
  • cap(0) : 表示匹配的整個(gè)文本的值
  • cap(1) : 表示第一個(gè)圓括號中的值
  • cap(2) : 表示第二個(gè)圓括號中的值
  • pos(int n) : 第n個(gè)組的位置 默認(rèn)值為0
  • indexIn() : 搜索字符串以找到匹配的字串,返回索引值,失敗返回-1
QRegExp rx("(.*)=(.*)");
QString str = ("a=101");
int pos = rx.indexIn(str);
if(pos>=0)
 {
     qDebug()<<rx.matchedLength(); //5
     qDebug()<<rx.capturedTexts(); //("a=101", "a", "101")
     qDebug()<<rx.cap(0);//"a=101"
     qDebug()<<rx.cap(1);//"a"
     qDebug()<<rx.cap(2);//"101"
     qDebug()<<rx.pos(0);//0
     qDebug()<<rx.pos(1);//0
     qDebug()<<rx.pos(2);//2
 }

QRegularExpression類簡介

QRegularExpression是在qt5.0引入,使用正則表達(dá)式提供模式匹配。

正則表達(dá)式是處理字符串和文本的非常強(qiáng)大的工具。

QRegularExpression 實(shí)現(xiàn)的正則表達(dá)式完全支持 Unicode。一個(gè)正則表達(dá)式由兩部分組成:一個(gè)模式字符串和一組改變模式字符串含義的模式選項(xiàng)。

為了執(zhí)行匹配,可以簡單地調(diào)用 match() 函數(shù),傳遞要匹配的字符串。match() 函數(shù)的結(jié)果是一個(gè) QRegularExpressionMatch 對象,可用于檢查匹配結(jié)果。

// 匹配兩個(gè)數(shù)字后跟一個(gè)空格和一個(gè)單詞
QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
bool hasMatch = match.hasMatch(); // true

如果匹配成功,(隱式)捕獲組編號 0 可用于檢索與整個(gè)模式字符串匹配的子字符串:

QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
if (match.hasMatch()) 
{
     QString matched = match.captured(0); // matched == "23 def"
     // do it
}

與QRegExp 的主要用法區(qū)別

QRegExp 的匹配結(jié)果存放在QRegExp對象自身:

QString QRegExp::cap(int nth = 0) const;

而QRegularExpression 類只用來檢索匹配,把檢索結(jié)果單列出來,成為一個(gè)類QRegularExpressionMatch;

QString QRegularExpressionMatch::captured(int nth = 0) const;

推測:這樣以來,QRegularExpression 檢索的負(fù)擔(dān)減小,效率因此提高;

總結(jié) 

到此這篇關(guān)于QT5中使用QRegularExpression代替QRegExp的文章就介紹到這了,更多相關(guān)QT5用QRegularExpression代替QRegExp內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ Thread實(shí)現(xiàn)簡單的socket多線程通信

    C++ Thread實(shí)現(xiàn)簡單的socket多線程通信

    本文主要介紹了C++ Thread實(shí)現(xiàn)簡單的socket多線程通信,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++11引入的STL中的unordered系列關(guān)聯(lián)式容器

    C++11引入的STL中的unordered系列關(guān)聯(lián)式容器

    STL中的unordered系列容器是C++11引入的基于哈希表實(shí)現(xiàn)的關(guān)聯(lián)式容器,STL unordered系列容器基于哈希表,支持快速查找但遍歷效率低,適用于無序場景;樹形容器基于紅黑樹,有序且性能穩(wěn)定,適用于需要有序的場景
    2025-10-10
  • floyd算法實(shí)現(xiàn)思路及實(shí)例代碼

    floyd算法實(shí)現(xiàn)思路及實(shí)例代碼

    這篇文章主要介紹了floyd算法實(shí)現(xiàn)思路及實(shí)例代碼,有需要的朋友可以參考一下
    2014-01-01
  • Qt重寫QTreeView自繪實(shí)現(xiàn)酷炫樣式

    Qt重寫QTreeView自繪實(shí)現(xiàn)酷炫樣式

    QTreeView,顧名思義,就是一種樹形的控件,在我們需要做類似于文件列表的視圖時(shí),是一個(gè)不錯(cuò)的選擇,下面我們就來看看qt如何重寫QTreeView實(shí)現(xiàn)酷炫樣式,感興趣的可以了解一下
    2023-08-08
  • C++中的strcmp函數(shù)

    C++中的strcmp函數(shù)

    strcmp函數(shù)是C++標(biāo)準(zhǔn)庫中用于字符串比較的重要函數(shù),在C++中,字符串比較是一項(xiàng)常見的操作,用于判斷兩個(gè)字符串是否相等或者大小關(guān)系,本文介紹C++中的strcmp函數(shù),感興趣的朋友一起看看吧
    2024-03-03
  • C++訪問std::variant類型數(shù)據(jù)的幾種方式小結(jié)

    C++訪問std::variant類型數(shù)據(jù)的幾種方式小結(jié)

    std::variant是?C++17中引入的一個(gè)新的類模板,提供了一種存儲不同類型的值的方式,本文主要介紹了C++訪問std::variant類型數(shù)據(jù)的幾種方式小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • C++11計(jì)時(shí)器之chrono庫簡介

    C++11計(jì)時(shí)器之chrono庫簡介

    C++11有了chrono庫,可以在不同系統(tǒng)中很容易的實(shí)現(xiàn)定時(shí)功能,要使用chrono庫,需要#include,其所有實(shí)現(xiàn)均在std::chrono namespace下,本文給大家介紹C++11計(jì)時(shí)器:chrono庫介紹,感興趣的朋友一起看看吧
    2023-12-12
  • 利用Matlab繪制一款專屬進(jìn)度條

    利用Matlab繪制一款專屬進(jìn)度條

    MATLAB自帶的進(jìn)度條是很簡單的,這樣的進(jìn)度條顯得冷冰冰的。因此,本文將用Matlab來DIY一款專屬的進(jìn)度條,感興趣的小伙伴可以了解一下
    2022-02-02
  • 關(guān)于函數(shù)調(diào)用方式__stdcall和__cdecl詳解

    關(guān)于函數(shù)調(diào)用方式__stdcall和__cdecl詳解

    下面小編就為大家?guī)硪黄P(guān)于函數(shù)調(diào)用方式__stdcall和__cdecl詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • c++的構(gòu)造函數(shù)使用方式

    c++的構(gòu)造函數(shù)使用方式

    這篇文章主要介紹了c++的構(gòu)造函數(shù)使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

宜兰市| 五家渠市| 札达县| 三穗县| 马龙县| 武山县| 根河市| 华宁县| 阿拉尔市| 察隅县| 延庆县| 兴隆县| 西林县| 惠来县| 太白县| 威海市| 荣昌县| 泗水县| 连江县| 马山县| 砀山县| 莱州市| 克什克腾旗| 文登市| 瓦房店市| 龙州县| 新密市| 额尔古纳市| 五寨县| 华宁县| 沁水县| 肃宁县| 双柏县| 耒阳市| 合江县| 漳平市| 昂仁县| 突泉县| 兴仁县| 桂平市| 瑞安市|