Qt正則表達式類QRegExp(附檢驗小程序)

      網友投稿 1207 2022-05-30

      2020博客之星年度總評選進行中:請為74號的狗子投上寶貴的一票!

      我的投票地址:點擊為我投票

      在許多場景中,我們需要驗證用戶輸入的數據是否有效,或者是查找并修改文本,或者是提取指定數據,為此,相對于Qstring的一些函數,QT提供了一個更加強大的類——QRegExp,使用函數配合正則表達式來操作字符串,QRegExp可以進行下面的操作,并附帶檢驗小程序,可在文末下載。

      一.正則表達式相關函數用法

      1.提取數據

      matchedLength() 匹配的長度

      capturedTexts() 捕捉到的字符串列表,???對應的還有captureCount() ,獲取表達式中含有的捕捉組的數目

      cap(int n) 第n個組的內容(0代表匹配自身)

      cap()參數缺省值為0。

      Qt正則表達式類QRegExp(附檢驗小程序)

      cap(0):表示匹配的整個文本的值。

      cap(1):表示第1個圓括弧中的值。

      cap(2):表示第2個圓括弧中的值。

      pos(int n) 第n個組的位置(默認值為0)

      QRegExp::indexIn() 搜索字符串以找到匹配的字串,返回索引值,失敗返回-1

      QRegExp::lastIndexIn() 同上,只是從后向前搜索

      QString str = "(.*)=(.*)"; QRegExp rx_1(str); QString str_1 = ("a=100"); int pos = rx_1.indexIn(str_1); if(pos>=0) { qDebug()<

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      (?:pattern)是非捕獲型括號 匹配pattern,但不捕獲匹配結果

      (pattern)是捕獲型括號。 匹配pattern,匹配pattern并捕獲結果,自動獲取組號

      (? pattern ) 匹配pattern, 匹配pattern并捕獲結果,設置name為組名

      例如,將(.*)=(.*)改為(?:.*)=(.*),qDebug()<

      2.修改文本

      將匹配到的字符串替換成其他字符串,例如將文本中的a=100修改為b=100

      QString str = "a=100"; s.replace(QRegExp("(.*)="),"b=");

      1

      2

      將匹配到的字符串內容進行自定義或替換,例如將文本中的a=100修改為100=a

      Qstring str = "a=100"; s.replace(QRegExp("(.*)=(.*)"),"\\2=\\1");// \\1就是相當于cap(1),表示第1個圓括弧中的值。

      1

      2

      3.驗證文本有效性

      這里用到QRegExp::exactMatch來判斷輸入的字符是否符合正則表達式。

      QRegExp::exactMatch() 判斷字符串是否完全(從頭到尾)匹配,返回真或假

      QRegExp rx("\\d"); //正則表達式 bool match = rx.exactMatch("8");//驗證文本 if(match == true) { //表達式正確 return; } //表達式錯誤

      1

      2

      3

      4

      5

      6

      7

      8

      9

      對此,QRegExp都有相對應的函數方法,還有一些函數上面沒有寫出來,例如:

      isValid();//判斷正則表達式是否合法,合法返回true,否則返回false。

      pattern();//獲得正則本身

      其他完整函數,大家可在文末點擊官方文檔查閱,當然,所有的函數方法都離不開一個核心就是正則表達式,我們來看下。

      二.正則表達式

      正則表達式是由表達式+量詞+斷言組成。

      首先是表達式:

      注意: C ++編譯器將反斜杠轉換為字符串。要將\包含在正則表達式中,請輸入兩次,即\\。要匹配反斜杠字符本身,請輸入四次,即\\\\。

      最簡單的一個正則表達式就是字符,例如:

      a 匹配字符a

      b 匹配字符b

      9 匹配數字9

      表達式后面可以加量詞,默認情況下,表達式會自動由{1,1}進行量化,即它應該只出現一次。在下面的列表中,E代表表達。表達式是一個字符,或者是一組字符的縮寫,或者在方括號中是一組字符,或者在括號中是表達式。

      例如:

      E?匹配0次或者1次E

      E+ 匹配1次或者多次E

      E{3,6} 匹配至少3次,至多6次E

      可以在表達式和量詞的基礎,加入斷言,進行一些限制,例如我們想要匹配0-9,我們可以將正則表達式寫為/d,如果我們想要匹配0-99,我們可以寫成[0-9]{1,2},這時,字符串“89”符合,字符串“我們今年21歲了”也符合,因為里面有21,單獨使用[0-9]{1,2},它會匹配包括出現在字符串中間的整數,如果想匹配的整數是整個字符串,那么就需要使用斷言“^”和“$”了。

      斷言在正則表達式中出現的位置對文本進行一些聲明,但不匹配任何字符。在以下列表中,E代表任何表達式。

      除此之外,還有其他一些其他字符可以和表達式組合,方括號表示匹配方括號中包含的任何字符。上述字符集縮寫可以出現在方括號中的字符集中。除字符集縮寫和以下兩個例外外,字符在方括號中沒有特殊含義。

      通配符匹配,大多數命令外殼(如bash或cmd.exe)都支持“文件通配”,即使用通配符標識一組文件的能力。所述setPatternSyntax()函數用于正則表達式和通配符模式之間切換。通配符匹配比完整的正則表達式簡單得多,并且只有四個功能:

      其他一些組合

      三.鏈接及下載

      github檢驗小程序源碼

      codechina檢驗小程序源碼

      檢驗小程序下載(關注免費下載)

      qt正則表達式官方文檔

      很多人找不到相對應的文檔,這里大家可以注意下,例如我是qt5的,那么只需要doc.qt.io/qt-5/xxxxxxx.html,這里xxxxxxx只需要寫對應的類名即可找到對應類的文檔,QRegExp類使用正則表達式提供模式匹配。

      我的博客即將同步至騰訊云+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=1f5f69uzg8o23

      Qt 小程序 正則表達式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Web前端知識點-認識浮動及清除浮動帶來影響的簡單方法
      下一篇:華為張平安:發揮云云協同創新優勢,加速全球初創企業快速成長
      相關文章
      亚洲国产成人久久综合野外| 亚洲人成片在线观看| 亚洲国产精品成人| 亚洲熟女乱色一区二区三区| 久久久久se色偷偷亚洲精品av| 亚洲高清无在码在线无弹窗| 麻豆亚洲AV永久无码精品久久| 亚洲综合精品一二三区在线| 亚洲精品线在线观看| 亚洲一区二区三区夜色| 久久夜色精品国产噜噜噜亚洲AV| 亚洲精品国产成人99久久| 亚洲bt加勒比一区二区| 亚洲成在人天堂在线| 亚洲一区二区电影| 久久亚洲AV无码精品色午夜 | 亚洲国产精品成人AV无码久久综合影院| 国产亚洲综合成人91精品| 色久悠悠婷婷综合在线亚洲| 亚洲区日韩区无码区| 久久精品国产亚洲5555| 国产成人亚洲精品狼色在线 | 亚洲国产精品人久久电影| 亚洲女人影院想要爱| 亚洲国产精品网站久久| 亚洲精品二三区伊人久久| 亚洲熟妇无码AV不卡在线播放| 亚洲乱码中文字幕在线| 国产精品亚洲色图| 亚洲一区二区三区国产精品| 国产AⅤ无码专区亚洲AV| 亚洲国产精品VA在线观看麻豆| 亚洲激情中文字幕| 亚洲成人免费电影| 中文字幕无码亚洲欧洲日韩| 美国毛片亚洲社区在线观看| 亚洲精品无码专区2| 亚洲精品无码不卡在线播HE| 亚洲∧v久久久无码精品 | 2022年亚洲午夜一区二区福利 | 亚洲AV无码专区国产乱码电影|