2016-04-28 22 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を参照してください。このパターンは、大文字のASCII文字ではない1つ以上の単語文字と単純に一致します。

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

それはあなたのために働いてうれしいです。また、私の答えは参考になりまし証明した場合(参照[スタックオーバーフローにupvoteする方法は?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow))upvotingご検討ください。 –