4

基本的にJavaのパッケージ名と同じように、QTでドット(。)で区切られた文字列を検証する方法を教えてください。

私のコードは次のようになります

QRegExp rx("^[\\w]+[^\\.{0,1}\\w+$]*$");
rx.setCaseSensitivity(Qt::CaseInsensitive);
return rx.exactMatch(package);

しかし、私は間違った結果を得ています

元:

 com.me.test // valid
 com.me.he. // invalid
 .com.me.he // invalid
 com..me.me // invalid
4

1 に答える 1

8

それは、文字クラスの使い方が間違っているためです。角括弧で囲まれた文字は文字クラスなので、

 [^\\.{0,1}\\w+$]*

で始まるため、否定された文字クラス^です。このクラスは、「.{},01+$」または .{},01+$ のいずれでもない任意の文字と一致し\wます。

あなたが望むものはもっと似ているように聞こえます

^\\w+(\\.\\w+)*$

ここでRegexrを参照してください

CaseInsensitiveちなみに、正規表現に明示的に書かれた文字がないため、オプションは必要ありません。

于 2012-10-18T07:37:35.143 に答える