Qt掃盲篇之QRegExp正則匹配類總結(jié)
一、正則表達(dá)式概述
正則表達(dá)式或“regexp”是一種用于匹配文本中的子字符串的模式。正則表達(dá)式在字符串處理的時(shí)候發(fā)揮重要的作用,用途如下四種:
- 驗(yàn)證
regexp可以測(cè)試子字符串是否滿足某些條件,例如是整數(shù)或不包含空格。 - 搜索
regexp提供了比簡(jiǎn)單的子字符串匹配更強(qiáng)大的模式匹配,例如,匹配單詞 mail、letter 或 correspondence 中的一個(gè),但不匹配單詞 email、mailman、mailer、letterbox 等。 - 搜索和替換
regexp可以用不同的子字符串替換所有出現(xiàn)的子字符串,例如,將所有出現(xiàn)的&替換為&除非&后面已經(jīng)跟了一個(gè)amp; - 字符串分割
regexp可以用來(lái)標(biāo)識(shí)字符串應(yīng)該在哪里被分割,例如分割制表符分隔的字符串。
推薦看下面鏈接關(guān)于正則表達(dá)的教程,我們只需要知道在Qt里怎么調(diào)用這個(gè) api 就行啦,這個(gè)網(wǎng)站還有在線的測(cè)試正則表達(dá)式的工具,驗(yàn)證自己的正則表達(dá)正確與否
http://edu.jb51.net/regexp/regexp-tutorial.html
本文將簡(jiǎn)要介紹regexp,描述Qt的regexp語(yǔ)言、一些示例以及函數(shù)文檔本身。QRegExp是基于Perl的 regexp 語(yǔ)言建模的。它完全支持Unicode。QRegExp還可以以一種更簡(jiǎn)單的通配符模式使用,這種模式類似于命令shell中的功能。QRegExp使用的語(yǔ)法規(guī)則可以通過(guò) setPatternSyntax() 改變。特別地,模式語(yǔ)法可以設(shè)置為 QRegExp::FixedString,這意味著要匹配的模式被解釋為普通字符串,即特殊字符(例如反斜杠)不會(huì)轉(zhuǎn)義。
- 注意:在Qt 5中,新的QRegularExpression類提供了一個(gè)與Perl兼容的正則表達(dá)式實(shí)現(xiàn),建議用它來(lái)代替QRegExp。
二、正則匹配介紹
正則表達(dá)式由表達(dá)式、量詞和斷言組成。 最簡(jiǎn)單的表達(dá)式是一個(gè)字符,例如x或5。表達(dá)式也可以是方括號(hào)中包含的一組字符。[ABCD]將匹配A、B、C或D。我們可以將這個(gè)表達(dá)式寫成[A-D],而匹配任何英文大寫字母的表達(dá)式寫成[A- Z]。
量詞指定了必須匹配的表達(dá)式出現(xiàn)的次數(shù)。X{1,1}表示匹配1個(gè)且僅匹配1個(gè); X{1,5}表示匹配一個(gè)包含至少一個(gè)X但不超過(guò)5個(gè)X的序列。
注意,一般來(lái)說(shuō),正則表達(dá)式不能用于檢查平衡的括號(hào)或標(biāo)簽。例如,可以編寫一個(gè) regexp 來(lái)匹配 html的開頭<b>和結(jié)尾</b>,如果<b>標(biāo)簽沒(méi)有嵌套,但如果<b>標(biāo)簽嵌套,相同的regexp將匹配一個(gè)開頭<b>標(biāo)簽和錯(cuò)誤的結(jié)尾。對(duì)于片段<b>bold <b>bold </b></b>,第一個(gè)<b>與第一個(gè)匹配,這是不正確的。不過(guò),可以編寫一個(gè)regexp來(lái)正確匹配嵌套的方括號(hào)或標(biāo)簽,但前提是嵌套級(jí)別是固定且已知的。如果嵌套級(jí)別不是固定的且已知的,那么就不可能寫出一個(gè)不會(huì)失敗的regexp。
假設(shè)我們想要一個(gè) regexp 來(lái)匹配 0 到 99 之間的整數(shù)。至少需要一位數(shù)字,因此我們從表達(dá)式 [0-9]{1,1} 開始,它只匹配一位數(shù)字一次。這個(gè) regexp 匹配 0 到 9 之間的整數(shù)。要匹配最多 99 個(gè)整數(shù),將最大出現(xiàn)次數(shù)增加為 2,因此 regexp 變?yōu)?[0-9]{1,2}。這個(gè) regexp 滿足匹配 0 到 99 之間的整數(shù)的原始要求,但它也匹配出現(xiàn)在字符串中間的整數(shù)。
如果希望匹配的整數(shù)是整個(gè)字符串,就必須使用錨點(diǎn)斷言,^ (上三角父)和 $ (美元符)。當(dāng)^是regexp中的第一個(gè)字符時(shí),這意味著regexp必須從字符串的開始匹配。當(dāng) $ 是regexp的最后一個(gè)字符時(shí),這意味著regexp必須匹配字符串的結(jié)尾。regexp變?yōu)?^ [0-9]{1,2}$。
注意,斷言,例如^和$,不匹配字符,而是匹配字符串中的位置。
如果您在其他地方看到過(guò)描述的正則表達(dá)式,它們可能與這里顯示的不同。這是因?yàn)槟承┳址土吭~太常見了,以至于它們被賦予了特殊的符號(hào)來(lái)表示。
[0-9]可以用符號(hào)\d代替。只匹配一次出現(xiàn)的量詞 {1,1} 可以用表達(dá)式本身替換,即 x{1,1} 與 x 相同。因此,我們的 0 到 99 的matcher可以寫成 ^\d{1,2}$ , 它也可以寫成 ^\d\d{0,1}$ ,即從字符串的開始匹配一個(gè)數(shù)字,緊接著是0或1個(gè)數(shù)字。實(shí)際上,它可以寫成 ^\d\d?$ 的嗎? 這也是量詞{0,1}的簡(jiǎn)寫,即出現(xiàn)0次或1次嗎?使表達(dá)式成為可選的。
^\d\d?$ 表示從字符串的開始,匹配一個(gè)數(shù)字,緊接著是 0 或 1 個(gè)數(shù)字,接著是字符串的結(jié)束。
要編寫一個(gè)匹配單詞’mail’、‘letter’或’correspondence’,但不匹配包含這些單詞的單詞,例如 ‘email’、‘mailman’、‘mailer’ 和 ‘letterbox’,請(qǐng)從匹配 ‘mail’ 的 regexp 開始。完整地說(shuō),regexp 是 m{1,1}a{1,1}i{1,1}l{1,1},但是因?yàn)樽址磉_(dá)式是由{1,1}自動(dòng)量化的,所以我們可以將 regexp 簡(jiǎn)化為 mail,即 ‘m’、‘a’、‘i’、‘l’。現(xiàn)在我們可以使用豎線 | (表示or)來(lái)包含另外兩個(gè)單詞,因此匹配這三個(gè)單詞中的任何一個(gè)的regexp就變成了 mail|letter|correspondence。匹配 ‘mail’、‘letter’或’correspondence’。
雖然這個(gè)regexp將匹配我們想要匹配的三個(gè)單詞中的一個(gè),但它也會(huì)匹配我們不想匹配的單詞,例如’email’。為了防止regexp匹配不需要的單詞,我們必須告訴它在單詞邊界處開始和結(jié)束匹配。首先,我們將regexp括在括號(hào)中(mail|letter|correspondence)。
括號(hào)將表達(dá)式組合在一起,它們標(biāo)識(shí)了我們想要捕獲的regexp部分。將表達(dá)式放在括號(hào)中允許我們?cè)诟鼜?fù)雜的regexp中將其作為組件使用。 它還允許我們檢查三個(gè)單詞中哪個(gè)是真正匹配的。為了強(qiáng)制匹配在單詞邊界開始和結(jié)束,我們將regexp包含在 \b 單詞邊界斷言中: \b(mail|letter|correspondence)\b 現(xiàn)在,regexp的意思是:匹配一個(gè)單詞邊界,然后是放在括號(hào)中的regexp,最后是單詞邊界。\b斷言匹配regexp中的位置,而不是字符。
單詞邊界是任何非單詞字符,例如空格、換行符或字符串的開頭和結(jié)尾。
如果我們想將&字符替換為HTML實(shí)體&,則匹配的regexp就是&。但這個(gè)regexp也會(huì)匹配&符號(hào)
三、表達(dá)式字符
字符 | 含義 |
---|---|
c | 字符表示自身,除非它有特殊的regexp含義。例如,c匹配字符c。 |
\c | 反斜杠后面的字符匹配字符本身,下面指定的字符除外。例如,要匹配字符串開頭的插入字符,可以寫^。 |
\a | 匹配ASCII的bell碼(BEL, 0x07)。 |
\f | 匹配ASCII表單提要(FF, 0x0C)。 |
\n | 匹配ASCII換行符(LF, 0x0A, Unix換行符)。 |
\r | 匹配ASCII回車(CR, 0x0D)。 |
\t | 匹配ASCII水平制表符(HT, 0x09)。 |
\v | 匹配ASCII垂直選項(xiàng)卡(VT, 0x0B)。 |
\xhhhh | 匹配十六進(jìn)制數(shù)hhhh(在0x0000和0xFFFF之間)對(duì)應(yīng)的Unicode字符。 |
\0ooo(例:\zero ooo) | 匹配八進(jìn)制數(shù)ooo的ASCII/Latin1字符(0到0377之間)。 |
. (dot) | 匹配任意字符(包括換行符)。 |
\d | 匹配一個(gè)數(shù)字(QChar::isDigit())。 |
\D | 匹配非數(shù)字。 |
\s | 匹配空白字符(QChar::isSpace())。 |
\S | 匹配非空白字符。 |
\w | 匹配單詞字符(QChar::isLetterOrNumber()、QChar::isMark()或’_')。 |
\W | 匹配非單詞字符。 |
\n | 第n個(gè)后向引用,例如\1、\2等 |
注意:c++編譯器會(huì)轉(zhuǎn)換字符串中的反斜杠。要在regexp中包含\,請(qǐng)輸入兩次,即 \\。要匹配反斜杠字符本身,請(qǐng)輸入四次,即 \\\\。
四、字符集
中括號(hào)表示匹配中包含的任意字符。上面描述的字符集縮寫可以出現(xiàn)在方括號(hào)中的字符集中。除了字符集縮寫和以下兩個(gè)例外,方括號(hào)中的字符沒(méi)有特殊含義。
- ^ :如果字符集作為第一個(gè)字符出現(xiàn)(即緊跟在左方括號(hào)之后),則插入符號(hào)對(duì)它取反。[abc]匹配’a’、‘b’或’c’,但[^abc]匹配除’a’、'b’或’c’以外的任何值。
- - :破折號(hào)表示一個(gè)字符范圍。[W-Z]匹配’W’或’X’或’Y’或’Z’。
使用預(yù)定義的字符集縮寫比跨平臺(tái)和語(yǔ)言使用字符范圍具有更好的可移植性。 例如,[0-9]匹配西方字母表中的一個(gè)數(shù)字,而 \d 匹配任何字母表中的一個(gè)數(shù)字。
注意:在其他regexp文檔中,字符集通常稱為“字符類”。
五、量詞
默認(rèn)情況下,一個(gè)表達(dá)式會(huì)自動(dòng)被{1,1}量化,即它應(yīng)該只出現(xiàn)一次。在下面的列表中,E代表表達(dá)式。表達(dá)式是一個(gè)字符,或一組字符的縮寫,或方括號(hào)中的一組字符,或括號(hào)中的表達(dá)式。
符號(hào) | 含義 |
---|---|
E? | 匹配0或1次e。這個(gè)量詞意味著前一個(gè)表達(dá)式是可選的,因?yàn)闊o(wú)論是否找到前一個(gè)表達(dá)式,它都會(huì)匹配。E ?和E{0,1}一樣。例如,凹痕?匹配’dent’或’ '。 |
E+ | 匹配一次或多次E。E+與E{1,}相同。例如,0+匹配0、00、000等。 |
E* | 匹配零次或多次E。它與E{0,}相同。量詞經(jīng)常在錯(cuò)誤中使用,而應(yīng)該使用+。例如,如果在表達(dá)式中使用\sKaTeX parse error: Undefined control sequence: \s at position 26: …符串,它將匹配每個(gè)字符串,因?yàn)閈?s?*意味著匹配零個(gè)或多個(gè)空格,然后是字符串結(jié)尾。要匹配結(jié)尾至少有一個(gè)空格的字符串,正確的regexp是\s+$。 |
E{n} | 完全匹配E n次E{n}等價(jià)于重復(fù)E n次例如,x{5}表示xxxxx。它也與E{n,n}相同,例如x{5,5}。 |
E{n} | 至少匹配n次E。 |
E{, m} | E最多匹配m次。E{,m}與E{0,m}相同。 |
E{n, m} | E至少出現(xiàn)n次,最多出現(xiàn)m次。 |
如果要將量詞應(yīng)用于前面的字符以外的字符,可以使用括號(hào)將字符組合在一個(gè)表達(dá)式中。例如,tag+匹配的是’t’和’a’以及至少一個(gè)’g’,而(tag)+匹配的是’tag’的至少一次出現(xiàn)。
- 注意:量詞通常是“貪婪的”。它們總是匹配盡可能多的文本。 例如,0+匹配它找到的第一個(gè)0以及第一個(gè)0之后的所有連續(xù)的0。應(yīng)用到20005,它匹配20005。量詞可以變成非貪心的,參見setMinimal()。
六、斷言
斷言對(duì)出現(xiàn)在regexp中的文本做了一些聲明,但它們不匹配任何字符。在下面的列表中,E代表任何表達(dá)式。
符號(hào) | 含義 |
---|---|
^ | 脫字符表示字符串的開始。如果你想匹配字面量^ ,就必須將其轉(zhuǎn)義為 \^ 。例如,^#include只匹配以’#include’開頭的字符串。(當(dāng)插入符號(hào)是字符集的第一個(gè)字符時(shí),它有特殊的含義,請(qǐng)參見“字符集”。) |
$ | 美元表示字符串的結(jié)束。例如\d\s*$將匹配以數(shù)字結(jié)尾的字符串(可選地,數(shù)字后面有空格)。如果你想匹配字面上的 $ ,就必須轉(zhuǎn)義為\$ 。 |
\b | 單詞邊界。例如,regexp \bOK\b表示匹配緊跟在單詞邊界(例如字符串或空格的開始)之后的字母’O’,然后匹配緊跟在另一個(gè)單詞邊界(例如字符串或空格的結(jié)束)之前的字母’K’。但是請(qǐng)注意,斷言實(shí)際上并不匹配任何空格,所以如果我們寫(\bOK\b)并且我們有一個(gè)匹配,它將只包含’OK’,即使字符串是" it 's OK now"。 |
\B | 非單詞邊界。當(dāng)\b為false時(shí),該斷言為true。例如,如果我們?cè)?quot;Left on"中搜索\Bon\B,匹配將失敗(空格和字符串末尾不是非單詞邊界),但在"公噸"中會(huì)匹配。 |
(?=E) | 積極的超前。如果表達(dá)式在regexp中的這一點(diǎn)匹配,則此斷言為true。例如,const(?=\s+char)匹配const ,只要它后面跟著char ,比如static const char * 。(與匹配’static const char *'的const\s+char比較。) |
(?!E) | 消極的超前。如果表達(dá)式在regexp中的此時(shí)不匹配,則此斷言為true。例如,const(?!\s+char)匹配const ,除非它后面跟著char 。 |
七、通配符匹配
大多數(shù)命令shell,如bash或cmd.exe,都支持“文件通配符”,即通過(guò)使用通配符來(lái)識(shí)別一組文件的能力。setPatternSyntax()函數(shù)用于在regexp和通配符模式之間切換。通配符匹配比完整的正則表達(dá)式簡(jiǎn)單得多,只有4個(gè)特征。
符號(hào) | 含義 |
---|---|
c | 除下面提到的字符外,任何字符都代表自己。因此c匹配字符c。 |
? | 匹配任意單個(gè)字符。它和。完整的正則表達(dá)式。 |
* | 匹配零個(gè)或多個(gè)任意字符。在完整的正則表達(dá)式中,它等同于 .* |
[…] | 字符集可以用方括號(hào)表示,類似于完整的正則表達(dá)式。在字符類內(nèi)部,就像在字符類外部一樣,反斜杠沒(méi)有特殊的含義。 |
在模式通配符中,通配符不能轉(zhuǎn)義。在WildcardUnix模式中,字符 ‘\’ 對(duì)通配符進(jìn)行轉(zhuǎn)義。
例如,如果我們使用通配符模式,并且有包含文件名的字符串,我們可以使用*. HTML來(lái)標(biāo)識(shí)HTML文件。這將匹配零個(gè)或多個(gè)字符,然后是一個(gè)點(diǎn)號(hào),然后是h
、t
、m
和l
。
要用通配符表達(dá)式測(cè)試字符串,可以使用exactMatch()。例如:
QRegExp rx("*.txt"); rx.setPatternSyntax(QRegExp::Wildcard); rx.exactMatch("README.txt"); // returns true rx.exactMatch("welcome.txt.bak"); // returns false
八、獲取文本
括號(hào)允許我們將元素組合在一起,以便我們可以量化和捕獲它們。例如,如果我們有表達(dá)式mail|letter|correspondence,它匹配一個(gè)字符串,我們知道其中一個(gè)單詞匹配,但不知道是哪個(gè)單詞。使用括號(hào)允許我們“捕獲”在它們的范圍內(nèi)匹配的任何內(nèi)容,因此如果我們使用(mail|letter|correspondence)并將這個(gè)regexp與字符串“I sent you some email”匹配,我們可以使用cap()或capturedTexts()函數(shù)來(lái)提取匹配的字符,在本例中是’mail’。
我們可以在regexp中使用捕獲的文本。為了引用捕獲的文本,我們使用從1開始索引的后向引用,與cap()相同。例如,我們可以使用\b(\w+)\ w+ \1\b在字符串中搜索重復(fù)的單詞,這意味著匹配單詞邊界,然后是一個(gè)或多個(gè)單詞字符,然后是一個(gè)或多個(gè)非單詞字符,然后是與第一個(gè)括號(hào)表達(dá)式相同的文本,然后是單詞邊界。
如果我們想使用圓括號(hào)純粹用于分組而不是捕獲,我們可以使用非捕獲語(yǔ)法,例如(?:green|blue)。非捕獲性括號(hào)以(?:
and end )
。在這個(gè)例子中,我們匹配green
或blue
,但我們不捕獲匹配,因此我們只知道是否匹配,而不知道實(shí)際找到的顏色。使用非捕獲式括號(hào)比使用捕獲式括號(hào)更高效,因?yàn)閞egexp引擎需要做的簿記工作更少。
捕獲括號(hào)和非捕獲括號(hào)都可以嵌套。
由于歷史原因,用于捕獲括號(hào)的量詞(例如*)比其他量詞更“貪婪”。例如,a*(a*)將匹配"aaa"與cap(1) == “aaa”。這種行為不同于其他regexp引擎(特別是Perl)。為了獲得更直觀的捕獲行為,可以在QRegExp構(gòu)造函數(shù)中指定QRegExp::RegExp2,或者調(diào)用setPatternSyntax(QRegExp::RegExp2)。
如果無(wú)法事先確定匹配項(xiàng)的數(shù)量,一種常見的習(xí)慣用法是在循環(huán)中使用cap()。例如:
QRegExp rx("(\\d+)"); QString str = "Offsets: 12 14 99 231 7"; QStringList list; int pos = 0; while ((pos = rx.indexIn(str, pos)) != -1) { list << rx.cap(1); pos += rx.matchedLength(); } // list: ["12", "14", "99", "231", "7"]
九、例子
第三個(gè)字符串匹配’6’。這是一個(gè)簡(jiǎn)單的驗(yàn)證0到99范圍內(nèi)整數(shù)的regexp。
QRegExp rx("^\\d\\d?$"); // match integers 0 to 99 rx.indexIn("123"); // returns -1 (no match) rx.indexIn("-6"); // returns -1 (no match) rx.indexIn("6"); // returns 0 (matched at position 0)
第二個(gè)字符串與This_is-OK
匹配。我們使用了字符集縮寫’\S’(非空白)和錨點(diǎn)來(lái)匹配不包含空白的字符串。
QRegExp rx("^\\S+$"); // match strings without whitespace rx.indexIn("Hello world"); // returns -1 (no match) rx.indexIn("This_is-OK"); // returns 0 (matched at position 0)
在下面的例子中,我們匹配包含’mail’或’letter’或’correspondence’的字符串,但只匹配整個(gè)單詞,即不匹配’email’
QRegExp rx("\\b(mail|letter|correspondence)\\b"); rx.indexIn("I sent you an email"); // returns -1 (no match) rx.indexIn("Please write the letter"); // returns 17
第二個(gè)字符串匹配"Please write The letter"。單詞“letter”也被捕獲了(因?yàn)橛欣ㄌ?hào))。我們可以這樣查看我們捕獲了什么文本:
QString captured = rx.cap(1); // captured == "letter"
這將從第一組捕獲括號(hào)中捕獲文本(從左到右計(jì)算捕獲的左括號(hào))。括號(hào)從1開始計(jì)數(shù),因?yàn)閏ap(0)是整個(gè)匹配的regexp(相當(dāng)于大多數(shù)regexp引擎中的’&')。
QRegExp rx("&(?!amp;)"); // match ampersands but not & QString line1 = "This & that"; line1.replace(rx, "&"); // line1 == "This & that" QString line2 = "His & hers & theirs"; line2.replace(rx, "&"); // line2 == "His & hers & theirs"
在這里,我們將QRegExp傳遞給QString的replace()函數(shù),以將匹配的文本替換為新的文本。
QString str = "One Eric another Eirik, and an Ericsson. " "How many Eiriks, Eric?"; QRegExp rx("\\b(Eric|Eirik)\\b"); // match Eric or Eirik int pos = 0; // where we are in the string int count = 0; // how many Eric and Eirik's we've counted while (pos >= 0) { pos = rx.indexIn(str, pos); if (pos >= 0) { ++pos; // move along in str ++count; // count our Eric or Eirik } }
我們使用了indexIn()函數(shù)來(lái)重復(fù)匹配字符串中的regexp。請(qǐng)注意,我們可以編寫pos+ = rx.matchedLength()來(lái)跳過(guò)已經(jīng)匹配的字符串,而不是每次前進(jìn)一個(gè)字符pos++。計(jì)數(shù)將等于3,匹配’一個(gè)Eric另一個(gè)erik,和一個(gè)Ericsson。埃里克,有多少個(gè)eirik ?”它不匹配Ericsson
或Eiriks
,因?yàn)樗鼈儧](méi)有非單詞的邊界。
regexp的一個(gè)常見用途是將帶分隔符的數(shù)據(jù)行分割到它們的組件字段中。
str = "The Qt Company Ltd\tqt.io\tFinland"; QString company, web, country; rx.setPattern("^([^\t]+)\t([^\t]+)\t([^\t]+)$"); if (rx.indexIn(str) != -1) { company = rx.cap(1); web = rx.cap(2); country = rx.cap(3); }
在這個(gè)例子中,我們的輸入行格式為公司名稱、網(wǎng)站地址和國(guó)家。不幸的是,regexp相當(dāng)長(zhǎng),并且不太通用——如果我們添加更多字段,代碼將中斷。一個(gè)更簡(jiǎn)單、更好的解決方案是查找分隔符(在本例中是’\t’),并獲取其周圍的文本。QString::split()函數(shù)可以接受分隔符字符串或regexp作為參數(shù),并相應(yīng)地分割字符串。
QStringList field = str.split("\t");
這里[0]字段表示公司,[1]字段表示網(wǎng)站地址,等等。
為了模仿shell的匹配,我們可以使用通配符模式。
QRegExp rx("*.html"); rx.setPatternSyntax(QRegExp::Wildcard); rx.exactMatch("index.html"); // returns true rx.exactMatch("default.htm"); // returns false rx.exactMatch("readme.txt"); // returns false
通配符匹配很方便,因?yàn)樗芎?jiǎn)單,但任何通配符regexp都可以用完整的regexp來(lái)定義,例如*.html$ ,注意,我們不能用通配符同時(shí)匹配 .html 和 .htm 文件,除非我們使用 *.htm* ,它也會(huì)匹配test.html.bak
。一個(gè)完整的regexp可以提供我們需要的精度: .*.html?$
QRegExp可以使用setcasessensitivity()不區(qū)分大小寫進(jìn)行匹配,也可以使用非貪婪匹配,參見setMinimal()。默認(rèn)情況下,QRegExp使用完整的regexp,但這可以用setPatternSyntax()改變。使用indexxin()可以實(shí)現(xiàn)正向搜索,使用lastindexxin()可以實(shí)現(xiàn)反向搜索。捕獲的文本可以使用capturedTexts()來(lái)訪問(wèn),它會(huì)返回所有捕獲的字符串的字符串列表,或者使用cap()來(lái)返回給定索引的捕獲的字符串。pos()函數(shù)接受一個(gè)匹配項(xiàng)索引,并返回匹配項(xiàng)在字符串中的位置(如果沒(méi)有匹配項(xiàng),則返回-1)。
總結(jié)
到此這篇關(guān)于Qt掃盲篇之QRegExp正則匹配類的文章就介紹到這了,更多相關(guān)Qt QRegExp正則匹配類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
OpenCV邊緣提取算法流程的實(shí)現(xiàn)(附DEMO)
本文主要介紹了OpenCV邊緣提取算法流程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08C++詳解如何實(shí)現(xiàn)動(dòng)態(tài)數(shù)組
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06C語(yǔ)言安全編碼之?dāng)?shù)組索引位的合法范圍
這篇文章主要介紹了C語(yǔ)言安全編碼的數(shù)組索引位合法范圍剖析,對(duì)于編碼安全非常重要!需要的朋友可以參考下2014-07-07C語(yǔ)言的常量,字符串,轉(zhuǎn)義字符,注釋你都了解嗎
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的常量,字符串,轉(zhuǎn)義字符,注釋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02C++數(shù)據(jù)結(jié)構(gòu)與算法之反轉(zhuǎn)鏈表的方法詳解
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)與算法之反轉(zhuǎn)鏈表的方法,結(jié)合實(shí)例形式分析了C++反轉(zhuǎn)鏈表的原理、實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08