qt-正規表示式qregexp
2023年1月10日
qregexp是以perl的正規表示式為基礎發展來的。可以使用簡單的萬用字元匹配,或者純字元匹配,也可以使用正規表示式匹配。使用setpatternsyntax()可以切換不同的匹配模式。
使用exactmatch()驗證字串是否符合指定格式。
匹配模式:regexp,regexp2,wildcard,wildcardunix,fixedstring,w3cxmlschema11。
參考:預設模式。類似perl格式的正規表示式。
regexp2模式與regexp類似,但是使用最小分組匹配來獲取匹配字串。
注意:在具有\的格式時,需要使用\\來轉義。
3.1.1.1 基本字元模式
1) 簡單單個字元:純字元。
2) 字符集中單個字元:【】表示指定字符集中單個字元(格式:字元集合,或-表示範圍,或^表示排除)。可以使用快捷匹配字元(參見:快捷字元:使用乙個自定義的轉義字元來代替常用的模式字串。)。如果需要使用utf8(如漢字)可以使用\u編碼(參見只包含漢字的字串。)的方式,utf8的編碼可以網路查詢,如 。
示例:a[^3]2.txt表示a2中間任意不同於3的乙個字元(無字元為false),
[0-9-]表示0到9或負號-。
3) 數量字元:至少n個:e,至多n個:e{,m},存在n個至m個:e{n,m}。確定數量字元e{}。預設返回最多匹配字元,使用setminimal()則返回最少匹配字串。
4) 開始字元:^
5) 結束字元:$
3.1.1.2 邏輯控制字元(斷言字元)
1) or:|表示或者。
2) 分組、捕獲:(e)表示括號內的模式為乙個基本模式,可以捕獲。
3) 分組、不捕獲:(?:e)表示括號內的模式為乙個基本模式,不可捕獲。
4) 分組中捕獲值:(\m)。m是捕獲的第m個分組值。
5) 肯定匹配:e(?=regexp)查詢e,其指定位置是regexp。
6) 否定匹配:e(?!regexp)=查詢e,其指定位置不是regexp。
3.1.1.3 快捷匹配字元:使用乙個自定義的轉義字元來代替常用的模式字串。
1) 數字、非數字:\d=【0-9】,\d=[^0-9]。
2) 字母或數字或下劃線、非字母或數字或下劃線或:\w=【a-za-z0-9_】,\w=【^a-za-z0-9_】。
3) 空白字元、非空白字元:\s=【 \t\r\n】,\s=【^ \t\r\n】。
4) 任意字元(包括換行):.
5) acsii轉換字元:\a\f….
3.1.1.4 快捷位置字元
1) 開始或結束、中間位置:\b=^|$,\b。
3.1.1.5 快捷數量字元
1) 不存在或存在1個:e?={0,1}
2) 存在至少乙個:e+={1,}
3) 存在0個或多個:e*={0,}
void regexp()
qregexp r;
r.setpatternsyntax (qregexp::regexp);
r.setpattern ("a.txt");
bool bvalid = r.exactmatch("a.txt");
qdebug()<<"a="bvalid = r.exactmatch("a32.txt");
qdebug()<<"a[^3]2"qdebug()<<"a[^3]2"qdebug()<<"a[^3]2"bvalid = r.exactmatch ("a");
qdebug()<<"a"qdebug()<<"a"qdebug()<<"a"qdebug()<<"a"a= true
a[^3]2 false
a[^3]2 true
a[^3]2 false
a false
a true
a true
a false
wildcardunix:使用\作為轉義字元標誌,其它與wildcard模式相同。
?:單個字元。
*:任意字元。
【】:指定單個字元(格式:字元集合,或-表示範圍,或^表示排除)。示例:a[^3]2.txt表示a2中間任意不同於3的乙個字元(無字元為false)。
void wildcard()
qregexp r;
r.setpatternsyntax (qregexp::wildcard);
r.setpattern ("a?2.txt");
boolbvalid = r.exactmatch ("ab2.txt");
qdebug()<<"?="bvalid = r.exactmatch ("abcd232.txt");
qdebug()<<"*="bvalid = r.exactmatch ("a32.txt");
qdebug()<<"a[^3]2"qdebug()<<"a[^3]2"qdebug()<<"a[^3]2"?= true
*= true
a[^3]2 false
a[^3]2 true
a[^3]2 false
僅將模式字串作為純屬字串,不再進行正則運算。
void fixedstring()
qregexp r;
r.setpatternsyntax (qregexp::fixedstring);
r.setpattern ("a?2.txt");
boolbvalid = r.exactmatch ("ab2.txt");
qdebug()<<"?="qdebug()<<"?="bvalid = r.exactmatch ("abcd232.txt");
qdebug()<<"*="qdebug()<<"*="bvalid = r.exactmatch ("a[^3]2.txt");
qdebug()<<"a[^3]2"qdebug()<<"a[^3]2"?= false
?= true
*= false
*= true
a[^3]2 true
a[^3]2 false
目標:獲取測試字串中匹配模式字串的值。
原理:整個模式作為索引0字串。
如果使用()進行分組捕獲,分組索引從1開始。
方法:獲取第n組匹配的字串值:cap(n)。
獲取所有匹配的字串值列表:capturetextes()。
匹配數量:capturecount()。
第n給匹配的位置:pos(n)。
方法:使用【】字符集,[a-za-z0-9-]+表示至少乙個字母、數字或-。
\u7532\u4e59\u4e19\u4e01表示甲乙丙丁的四個漢字的utf8編碼。
只有完全匹配的才能通過驗證。
示例:qregexp reg("[a-z0-9\u7532\u4e59\u4e19\u4e01-]+");
if(false == reg.exactmatch (strtext)))([a-za-z]?)(\\d)(\\d)");
qstringlist lst;
int pos=0;
while ((pos = reg.indexin(currenttext,pos)) != -1)
reg.capturecount ();
for(int i =1;ilst << reg.cap(i);
qdebug()結果:nj50b001002->("n","j", "50", "b", "001", "002")
j50b001003->("", "j", "50", "b", "001","003")
j50->("","j", "50", "", "", "")
Qt之正規表示式 QRegExp
qt裡對大名鼎鼎的正規表示式有很好的支援,使用qregexp類,你可以非常快的完成對文字的驗證 資料提取 替換。qt的sdk包裡還提供了regexp的gui小工具,方便你對正規表示式的驗證。本文在qt4.5.3下驗證通過。你可以使用qregexp exactmatch來判斷乙個字串是否符合乙個pat...
Qt之正規表示式 QRegExp
qt裡對大名鼎鼎的正規表示式有很好的支援,使用qregexp類,你可以非常快的完成對文字的驗證 資料提取 替換。qt的sdk包裡還提供了regexp的gui小工具,方便你對正規表示式的驗證。本文在qt4.5.3下驗證通過。你可以使用qregexp exactmatch來判斷乙個字串是否符合乙個pat...
Qt正規表示式 QRegExp類
物件.exactmatch 引數字元 引數是否和正規表示式準確匹配 物件.setpattern 正規表示式 設定匹配模式 物件.indexin 單詞 返回表示式邊界所在單詞中得 位置 物件.setpatternsyntax qregexp wildcard 列舉值patternsyntax 設定模式...