QT正則表達式


1、 QT中的QRegExp類實現了正則表達式的模式匹配。

2、Qt中有兩個不同類的正則表達式.
- 第一類為元字符.它表示一個或多個常量表達式.
- 令一類為 轉義字符,它代表一個特殊字符.

1) 元字符
. 匹配任意單個字符.例如, 1.3 可能是1. 后面跟任意字符,再跟3
^ 匹配字符串首. 例如, ^12可能是123,但不能是312
$ 配字符串尾. 例如, 12$可以是312, 當不能是 123
[] 匹配括號內輸入的任意字符.[123]可以為1, 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]+$")); //匹配所有大小寫字母和數字組成的字符串
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。

------------------------------------------------------------------------------------

[ab5@] 匹配 "a" 或 "b" 或 "5" 或 "@"

[f-k] 匹配 "f"~"k" 之間的任意一個字母

[^abc] 匹配 "a","b","c" 之外的任意一個字符

[^A-F0-3] 匹配 "A"~"F","0"~"3" 之外的任意一個字符

舉例1:表達式 "[bcd][bcd]" 匹配 "abc123" 時,匹配的結果是:成功;匹配到的內容是:"bc";匹配到的位置是:開始於1,結束於3。

舉例2:表達式 "[^abc]" 匹配 "abc123" 時,匹配的結果是:成功;匹配到的內容是:"1";匹配到的位置是:開始於3,結束於4。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM