2011-12-17 3 views
0

入力がURLかプレーンなファイルパスかどうかを検出しようとしています。私は文字列内のhttp://かwwwをチェックするだけで十分です。QString :: contains(QRegExp)は何を返すべきですか? RegExp内でポジションメタ文字を使用できますか?

私はQString :: contains(QRegExp)を試していますが、期待しているものが返されないことがわかりました。それがない場合は、//、または1:最初のパラメータは、WWWまたはhttpで始まっていない場合には0を印刷する必要があります

#include <QtCore> 
#include <iostream> 

int main(int argc, char *argv[]){ 
     std::cout << "true: " << true << std::endl; 
     std::cout << "false: " << false << std::endl; 
     if (argc > 1) 
       std::cout << "input: " << (QString(argv[1]).contains(QRegExp("^[(http://)(www)]"))) << std::endl; 
     return 0; 
} 

:私はそれが偽のだということを証明するためのスニペットを作りました。しかし、これは私の結果です:

$ ./test 
true: 1 
false: 0 
$ ./test foobar 
true: 1 
false: 0 
input: 0 
$ ./test www.google.com 
true: 1 
false: 0 
input: 0x7fffa68f72df 
$ ./test ww_foobar.com 
true: 1 
false: 0 
input: 0x7fff177ba65f 

何が起こっているのですか?

答えて

1

あなたは何をしたいのですか?

^[(http://)(www)] 

手段:

マッチ文字列の先頭、あなたはおそらく書きたかった何(htp:/)w

の一つが続いです:あなたは、角括弧正しい

std::cout << "input: " << (QString(argv[1]).contains(QRegExp("^(?:http://|www)"))) << std::endl; 
     return 0; 
+0

文字の一致にのみ使用する必要があります。文字列の一致のために、括弧の中にパイプを使用する必要があります。それはおそらくエラーです。私がそれを受け入れることができるように、あなたの答えを修正してください(それは切り捨てられているようです)。 – Spidey

+0

@Spidey Done、私は思う:) – FailedDev

関連する問題