2014-09-22 36 views
0

我正在Qt 5.2.1中工作。我需要編寫一個正則表達式來查找表示具有十進制值的數字的字符串,例如它會發現1.234或123.4,但不是123或類似a1.2的東西。我有這樣的正則表達式:Qt - RegExp無法正常工作

QRegExp r("^\\d+\.\\d+$"); 

不過,我已經注意到,除了發現價值,它應該,它也發現這是所有數字和具有> = 3位,但沒有小數,例如任何值12345,以及除中間的一個字符(如12:345)以外的所有數字的值。我很確定問題出在正則表達式試圖使用「。」代表任何角色,但我認爲使用「。」本應該讓它認識到實際的「。」字符代替。如果有人看到我做錯了什麼,我會很感激幫助。謝謝!

回答

2

試試這個:

QString txt = ui->textEdit->toPlainText(); 
QRegExp r("[0-9]+\\.[0-9]+"); 
QRegExp r("^\\d+\\.\\d+$");//with this \\. works properly too (same output) 

if(txt.contains(r)) 
{ 
    qDebug() << txt << "contains double" ; 
} 
else 
    qDebug() << txt << " not contains double" ; 

在我的電腦能抓住數字與小數點,而忽略其他。

輸出:

"45:3" not contains double 
"45.323" contains double 
"12345" not contains double 
"12:345" not contains double 
+0

非常感謝您的回答,我改成了「 」\\。「'和現在的工作。但是,請你解釋一下爲什麼*可行?如果使用反斜槓來轉義特殊字符,在我看來就像''\。「'應該轉義特殊字符'」。「'並且只查找句點字符,而'」\\。「'會轉義'」 \「'同時保留''''特殊的,所以它會發現'」\「'後面跟着任何字符。爲什麼它以第二種方式工作,但不是第一種? – thnkwthprtls 2014-09-22 18:36:56

+1

@thnkwthprtls yes,'「\\」'escapes'「\」'so「\\」。被轉義'「\」加。 == \ .'看來你使用簡單的點。正如文件所說:'。 (dot)\t匹配任何字符(包括換行符).'我玩你的第一個正則表達式,我得到'45:3','45b3'和'45 \ n3'返回true,這意味着它是'dot',而不是你想要什麼。 – Chernobyl 2014-09-22 18:44:06

+0

啊我明白了,謝謝:) – thnkwthprtls 2014-09-22 18:48:24