QT 正規表示式QRegExp

2021-07-02 03:53:41 字數 3860 閱讀 5614

qt-正規表示式qregexp

[email protected]

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 設定模式...