QT5中使用QRegularExpression代替QRegExp方法代碼
前言
今天遇到一個奇怪的問題,在qt5.12版本中使用正則QRegExp regx.setPattern(“[0-9]{10}”);去匹配一個十個連續(xù)數(shù)字,神奇的出現(xiàn)了在Debug調試模式下,匹配字符串 ”D:/Project/bin/輸液監(jiān)控0571001001.db“無法通過,在release模式下,可以匹配通過,并獲取到“0571001001”字符串。帶著這個我問題我上網(wǎng)查了一些資料。發(fā)現(xiàn)是QRegExp不支持反向預查,并且大家都有棄用QRegExp啟用QRegularExpression,原因有QRegExp它具有笨拙的API,運行緩慢,錯誤,無法維護,支持perl regexp功能的非常有限子集,以此類推。QRegularExpression是Qt5加入的,QRegularExpression相比與QRegExp幾乎完全兼容了perl的RegExp引用。且似乎處理了QRegExp中的錯誤。
QRegExp類簡介
QRegExp類是qt框架的一部分,很早以前就引入了(QT4.2)。其基本使用如
- matchedLength() : 匹配的長度
- capturedTexts() : 捕捉到的字符串列表
- captureCount() : 獲取表達式中含有的捕捉組的數(shù)組
- cap(0) : 表示匹配的整個文本的值
- cap(1) : 表示第一個圓括號中的值
- cap(2) : 表示第二個圓括號中的值
- pos(int n) : 第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引入,使用正則表達式提供模式匹配。
正則表達式是處理字符串和文本的非常強大的工具。
QRegularExpression 實現(xiàn)的正則表達式完全支持 Unicode。一個正則表達式由兩部分組成:一個模式字符串和一組改變模式字符串含義的模式選項。
為了執(zhí)行匹配,可以簡單地調用 match() 函數(shù),傳遞要匹配的字符串。match() 函數(shù)的結果是一個 QRegularExpressionMatch 對象,可用于檢查匹配結果。
// 匹配兩個數(shù)字后跟一個空格和一個單詞 QRegularExpression re("\\d\\d \\w+"); QRegularExpressionMatch match = re.match("abc123 def"); bool hasMatch = match.hasMatch(); // true
如果匹配成功,(隱式)捕獲組編號 0 可用于檢索與整個模式字符串匹配的子字符串:
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 的匹配結果存放在QRegExp對象自身:
QString QRegExp::cap(int nth = 0) const;
而QRegularExpression 類只用來檢索匹配,把檢索結果單列出來,成為一個類QRegularExpressionMatch;
QString QRegularExpressionMatch::captured(int nth = 0) const;
推測:這樣以來,QRegularExpression 檢索的負擔減小,效率因此提高;
總結
到此這篇關于QT5中使用QRegularExpression代替QRegExp的文章就介紹到這了,更多相關QT5用QRegularExpression代替QRegExp內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++編程模板匹配超詳細的識別手寫數(shù)字實現(xiàn)示例
大家好!本篇文章是關于手寫數(shù)字識別的,接下來我將在這里記錄我的手寫數(shù)字識別的從零到有,我在這里把我自己的寫代碼過程發(fā)出來,希望能幫到和我一樣努力求知的人2021-10-10C語言中settimeofday函數(shù)和gettimeofday函數(shù)的使用
這篇文章主要介紹了C語言中的settimeofday函數(shù)和gettimeofday函數(shù)的使用,注意settimeofday()函數(shù)只返回0和-1,需要的朋友可以參考下2015-08-08C++ Qt開發(fā)之PushButton按鈕組件的使用詳解
Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,本文將重點介紹QPushButton按鈕組件的常用方法及靈活運用,感興趣的小伙伴可以學習一下2023-12-12