一、 QT中的QRegExp類實作了正規表達式的模式比對。
二、Qt中有兩個不同類的正規表達式.
- 第一類為元字元.它表示一個或多個常量表達式.
- 另一類為 轉義字元,它代表一個特殊字元.
1) 元字元
. 比對任意單個字元.例如, 2.3 可能是2. 後面跟任意字元,再跟3
^ 比對字元串首. 例如, ^56可能是563,但不能是356
$ 配字元串尾. 例如, 12$可以是356, 當不能是 563
[] 比對括号内輸入的任意字元.[623]可以為6, 2 或3
* 比對任意數量的前導字元. 例如, 1*2可以為任意數量個1(甚至沒有), 後面跟一個2
+ 比對至少一個前導字元. 例如, 1+2必須為一個或多個1, 後跟一個2
? 比對一個前導字元或為空. 例如 1?2可以為2或這12
2)統配模式
通過 QRegExp::setPatternSyntax(QRegExp::Wildcard);可以将元字元設定為統配模式.在統配模式下,隻有3個元字元可以使用.他們的功能沒有變化.
? 比對任意單個字元, 例如, 1?2可以為1,後面跟任意單個字元, 再跟2
* 比對任意一個字元序列. 例如, 1*2, 可以為1, 後面跟任意數量的字元, 再跟一個2
[] 比對一個定義的字元集合. 例如, [a-zA-Z\.]可以比對 a到z之間任意一個字元和. [^a]比對出小寫a以外的字元.
3)轉義序列
\. 比對”.”
\^ 比對”^”
\$ 比對”$”
\[ 比對"["
\] 比對”]”
\* 比對”*”
\+ 比對”+”
\? 比對”?”
\b 比對響鈴字元,使計算機發出嘟的一聲.
\t 制表符号\n 換行符号
\r 回車符鉿
\s 任意空格
\xnn 比對16進制為nn的字元
\0nn 比對8進制的nn字元
這些表達式均以\開始, 與C++的轉義字元相同,是以為了定義QRegExp中的一個轉義序列,需要在前面添加兩個\\
3、QRegExp類的構造函數
- 預設構造函數,QRegExp(),産生一個空的正規表達式對象。
- 拷貝構造函數,QRegExp(const QRegExp& patten)
- 模式構造函數,QRegExp ( const QString & pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, PatternSyntax syntax = RegExp),産生指定比對模式的正規表達式對象。
4、可以獲得正規表達式對象的資訊和比對資訊
1) isValid(),判斷正規表達式是否合法,合法傳回true,否則傳回false。
例如:QRegExp exp1("c[9]");
bool valid=exp1.isValid();//傳回true
QRegExp exp1("c[9");
bool valid=exp1.isValid();//傳回false
2)errorString()
檢查正則是否有錯誤,和isValid類似,當有錯誤時傳回"no error occurred", 無錯誤傳回"unexpected end"
3)isEmpty(),判斷正則是否為空,當采用預設構造函數生成正則時,此函數傳回true,否則傳回false。
e.g. QRegExp exp1;
bool valid=exp1.isEmpty();//傳回true
4) caseSensitivity () 看正則是否大小寫敏感。
5) cap(),capturedTexts () 前者獲得捕捉的每一項,index從1開始,後者則獲得整個捕捉清單。
6) exactMatch(QString),傳回是否整串比對,比對一部分也傳回false。
7) indexIn(),進行比對,如果成功則傳回index,不成功傳回-1
8) matchedLength(),傳回比對的串的長度。
9) numCaptures(),獲得正則裡捕捉項的個數。
10) pattern(),獲得正則本身
11) patternSyntax()
enum PatternSyntax { RegExp, RegExp2, Wildcard, FixedString } 預設為RegExp。
5、舉例
QRegExp rx;
rx.setPatternSyntax(QRegExp::RegExp);
rx.setCaseSensitivity(Qt::CaseSensitive); //大小寫敏感
rx.setPattern(QString("^[A-Za-z0-9]+#34;)); //比對所有大小寫字母和數字組成的字元串
QString s = "dsada@";
rx.exactMatch(s); //傳回的值為false,因為s中含有@字元
------------------------------------------------------------------------------------
1、常用正規表達式
字元 說明
\r, \n 代表 回車和換行符
\t 制表符
\\ 代表 "\" 本身
\^ 比對 ^ 符号本身
\$ 比對 $ 符号本身
. 比對除了換行符以外的任意字元
\w 比對字母、數字、下劃線、漢字
\s 比對任意的空白符
\b 單詞的開始或結尾
\~ 比對字元串的開始
$ 比對字元串的結束
\ba\w*\b :比對以字母a開頭的單詞——先是某個單詞開始處(\b),然後是字母a,然後是任意數量的字母或數字(\w*),最後是單詞結束處(\b)。
\d+ :比對1個或更多連續的數字。這裡的+是和*類似的元字元,不同的是*比對重複任意次(可能是0次),而+則比對重複1次或更多次。
\b\w{6}\b: 比對剛好6個字元的單詞。
[] 包含一系列字元
[^] 包含之外一系列字元
[ab5@]: 比對 "a" 或 "b" 或 "5" 或 "@"
[^abc]: 包含abc之外的任意字元
[f-k]: f-k之間的任意字元
表達式 說明
{n} 表達式重複n次,比如:"\w{2}" 相當于 "\w\w";"a{5}" 相當于 "aaaaa"
{m,n} 表達式至少重複m次,最多重複n次,比如:"ba{1,3}"可以比對 "ba"或"baa"或"baaa
{m,} 表達式至少重複m次,比如:"\w\d{2,}"可以比對 "a12","_456","M12344".
? 比對表達式0次或者1次,相當于 {0,1},比如:"a[cd]?"可以比對 "a","ac","ad"
+ + 表達式至少出現1次,相當于 {1,},比如:"a+b"可以比對 "ab","aab","aaab".
* 表達式不出現或出現任意次,相當于 {0,},比如:"\^*b"可以比對 "b","^^^b".
比如:"\w{2}" 相當于 "\w\w";"a{5}" 相當于 "aaaaa"
比如:"ba{1,3}"可以比對 "ba"或"baa"或"baaa"
比如:"\w\d{2,}"可以比對 "a12","_456","M12344"...
如:"a[cd]?"可以比對 "a","ac","ad"
如:"a+b"可以比對 "ab","aab","aaab"
如:"\^*b"可以比對 "b","^^^b"
舉例1:表達式 "\d+\.?\d*" 在比對 "It costs $12.5" 時,比對的結果是:成功;比對到的内容是:"12.5";比對到的位置是:開始于10,結束于14。
舉例2:表達式 "go{2,8}gle" 在比對 "Ads by goooooogle" 時,比對的結果是:成功;比對到的内容是:"goooooogle";比對到的位置是:開始于7,結束于17。
---------------------------txwtech---------------------------------------------------------
[ab5@] 比對 "a" 或 "b" 或 "5" 或 "@"
[f-k] 比對 "f"~"k" 之間的任意一個字母
[^abc] 比對 "a","b","c" 之外的任意一個字元
[^A-F0-3] 比對 "A"~"F","0"~"3" 之外的任意一個字元
舉例1:表達式 "[tcd][tcd]" 比對 "atc123" 時,比對的結果是:成功;比對到的内容是:"tc";比對到的位置是:開始于1,結束于3。
舉例2:表達式 "[^atc]" 比對 "atc123" 時,比對的結果是:成功;比對到的内容是:"1";比對到的位置是:開始于3,結束于4。