Qt正則表達式類QRegExp(附檢驗小程序)
2020博客之星年度總評選進行中:請為74號的狗子投上寶貴的一票!
我的投票地址:點擊為我投票
在許多場景中,我們需要驗證用戶輸入的數據是否有效,或者是查找并修改文本,或者是提取指定數據,為此,相對于Qstring的一些函數,QT提供了一個更加強大的類——QRegExp,使用函數配合正則表達式來操作字符串,QRegExp可以進行下面的操作,并附帶檢驗小程序,可在文末下載。
一.正則表達式相關函數用法
1.提取數據
matchedLength() 匹配的長度
capturedTexts() 捕捉到的字符串列表,???對應的還有captureCount() ,獲取表達式中含有的捕捉組的數目
cap(int n) 第n個組的內容(0代表匹配自身)
cap()參數缺省值為0。
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并捕獲結果,自動獲取組號 (? 例如,將(.*)=(.*)改為(?:.*)=(.*),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小時內刪除侵權內容。