1. 程式人生 > >QT 正則表達式(基礎篇)

QT 正則表達式(基礎篇)

說明 http 換行 dde push txt works 字母 pac

引用http://www.cnblogs.com/sld666666/archive/2011/03/16/1985715.html

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"...

2.Qt 中使用正則表達式

Qt 用QRegExp 來封裝正則表達式。如: QRegExp rx("^[0-9]+(\\.\\d+)?$");

例如我們又這個一個有規則的字符串:價格:數量:商家編碼:屬性名:屬性值;屬性名:屬性值; 價格:數量:商家編碼:屬性名:屬性值;屬性名:屬性值;屬性名:屬性值; 價格:數量:商家編碼:屬性名:屬性值;

想要分成:

價格:數量:商家編碼:屬性名:屬性值;屬性名:屬性值;
價格:數量:商家編碼:屬性名:屬性值;屬性名:屬性值;屬性名:屬性值;
價格:數量:商家編碼:屬性名:屬性值;

首先選擇合適的正則表達式:(\w*:){3}(\w*:\w*;)+, 然後:

QRegExp rx(tr("(\\w*:){3}(\\w*:\\w*;)+"));
int pos(0);

while ((pos = rx.indexIn(str, pos)) != -1)
{
strList.push_back(rx.capturedTexts().at(0));
pos += rx.matchedLength();
}

strList 就是想要的結果了

QT 正則表達式(基礎篇)