2016-04-28 139 views
1

我試圖從QString中刪除SQL語句。所有SQL指令都是大寫。我只想使用名稱中全部使用下劃線作爲空格的小寫字母名稱。作爲樣品QString可能包含:兼容Perl的正則表達式匹配大寫「,」,空格和「(」「)」

CREATE TABLE IF NOT EXISTS activated_alerts(id INTEGER PRIMARY KEY AUTOINCREMENT, date_and_time TEXT, system_state TEXT, alarm_no_185 BOOL NOT NULL, alarm_no_4 BOOL NOT NULL, alarm_no_5 BOOL NOT NULL, alarm_no_2 BOOL NOT NULL, alarm_no_102 BOOL NOT NULL, alarm_no_7 BOOL NOT NULL, alarm_no_27 BOOL NOT NULL, alarm_no_120 BOOL NOT NULL, alarm_no_103 BOOL NOT NULL, alarm_no_190 BOOL NOT NULL, alarm_no_30 BOOL NOT NULL, alarm_no_31 BOOL NOT NULL, alarm_no_32 BOOL NOT NULL, alarm_no_33 BOOL NOT NULL, alarm_no_34 BOOL NOT NULL, alarm_no_35 BOOL NOT NULL) 

我試圖^[A-Z]+$,但我發現零個匹配。

QRegularExpression re("^[A-Z]+$"); 
QRegularExpressionMatch match = re.match(m_activatedAlertsSQLStatement); 
if(match.hasMatch()) 
{ 
    qDebug() << "CAPTURED: " << match.capturedTexts(); 
} 
+0

取下錨 「^」 和 「$」,並使用globalMatch()QRegularExpressionMatchIterator類的。 –

+0

@lbarros它只能找到第一個大寫字「CREATE」。 – Barracuda

+0

使用QRegularExpressionMatchIterator類匹配所有可能的匹配 –

回答

0

您可以使用

[^\WA-Z]+ 

regex demo。該模式簡單地匹配1個或多個不是大寫ASCII字母的單詞字符。

Qt的樣品演示:

QRegularExpression re("[^\\WA-Z]+"); 
QString subject("YOUR_STRING"); 
QRegularExpressionMatchIterator i = re.globalMatch(subject); 
while (i.hasNext()) { 
    QRegularExpressionMatch match = i.next(); 
    qDebug() << "CAPTURED: " << match.captured(0); // Print match value 
    //... 
} 
+0

很高興爲您效力。如果我的回答對你有幫助,請考慮upvoting(參見[如何在堆棧溢出?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) 。 –