2016-04-13 17 views
3

私はQt5.6を使用しています。Qtの正規表現

シリアルポートで受信データを処理する必要があります。データのフォーマットは「AD = + 172345AD = + 272345」となります。受信データをQStringに追加し、Regexを使用して小数点以下を抽出します。

私は正規表現で記述する場合:

int tmp = StrData.indexOf(QRegularExpression("AD=\+[0-9]{6}")) 

にそれが一致していない、すなわちtmpが常に-1です。しかし、正規表現hereをテストしたところ、有効であることがわかりました。何が問題なの?

+3

バックスラッシュ( '\\ +')を二重にするか、 '[]'( '[+]')の中に '+'を入れます。 –

答えて

4

docsにつき、あなたは文字列に正規表現reの最初の試合のインデックス位置を取得するためにQString.indexOf内で正規表現を使用することができます。

正規表現の唯一の問題は、Qtでは文字列がCスタイルであることです。つまり、エスケープシーケンスを含むことができます。したがって、正規表現の特殊文字をエスケープするバックスラッシュは2倍にする必要があります。内部[...]ので

使用

QRegularExpression("AD=\\+[0-9]{6}") 

又は

QRegularExpression("AD=[+][0-9]{6}") 

+はリテラル文字として扱われます。