0

入力が URL なのかプレーンなファイル パスなのかを検出しようとしています。文字列内の http:// または www をチェックするだけで十分です。

だから、私は QString::contains(QRegExp) を試していますが、期待どおりに返されないことがわかりました。偽物であることを証明するためにスニペットを作成しました。

#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;
}

最初のパラメーターが www または http:// で始まらない場合は 0 を出力し、そうである場合は 1 を出力します。しかし、これは私の結果です:

$ ./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

誰が何が起こっているのか知っていますか?

4

1 に答える 1

1

あなたがやりたいことをやっていると確信していますか?

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

意味 :

文字列の先頭に一致し、その後に次のいずれかが続きます(htp:/)w

おそらく書きたかったのは次のとおりです。

std::cout << "input: " << (QString(argv[1]).contains(QRegExp("^(?:http://|www)"))) << std::endl;
        return 0;
于 2011-12-17T00:26:54.183 に答える