QT 正則表達式(基礎篇)
阿新 • • 發佈:2018-04-25
說明 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 正則表達式(基礎篇)