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,如果以 www 或 http:// 开头,则应打印 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 回答